gpt4 book ai didi

cmake - 将 target_include_directories 与对象库一起使用

转载 作者:行者123 更新时间:2023-12-04 21:38:51 34 4
gpt4 key购买 nike

我有一个 CMake 项目,它构建了一个依赖于另一个静态库的静态库。我想把这个静态库变成一个 object libraries .当我这样做时,我得到一个编译器错误,我想我对对象库有一些不了解。

这是我正在努力实现的一个例子。 MyLib 和 MyLib2 都是静态库,MyLib 使用在 MyLib2 中定义和声明的函数。

MyLib
CMakeList.txt
MyLib.h
MyLib.cpp
MyLib2
CMakeList.txt
MyLib2.h
MyLib2.cpp

MyLib2/CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project (MyLib2)

add_library(${PROJECT_NAME} OBJECT MyLib2.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

MyLib/CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project (MyLib)

add_subdirectory(MyLib2)

add_library(${PROJECT_NAME} STATIC MyLib.cpp MyLib.h)
target_link_libraries(${PROJECT_NAME} MyLib2)

MyLib.h 包含 MyLib2.h 以使用它声明的函数。
#ifndef MyLib
#define MyLib

#include "MyLib2.h"

#endif

当 MyLib2 作为静态库构建时,我可以毫无问题地构建代码(我在 Mac 上使用 make 和 clang)。但是,当我将 MyLib2 转换为对象库时,出现编译错误,提示无法找到 MyLib2.h。
MyLib.h:4:10: fatal error: 'MyLib2.h'file not found

以下是 MyLib2 是对象库时 CMake 文件的内容。

MyLib2/CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project (MyLib2)

add_library(${PROJECT_NAME} OBJECT MyLib2.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

MyLib/CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project (MyLib)

add_subdirectory(MyLib2)

add_library(${PROJECT_NAME} STATIC MyLib.cpp $<TARGET_OBJECTS:MyLib2>)

当 MyLib2 是一个对象库时,我不明白为什么 MyLib 不能再 MyLib2.h。也许使用方式有问题 target_include_directories .

最佳答案

这在评论中得到了回答:

@Clem:当您与库目标链接时,您将使用其 INTERFACE_INCLUDE_LIBRARIES 属性,其中包含包含目录 Mylib2。当您通过 $ 使用对象库时,您不使用任何目标,因此不消耗任何属性。 – 齐瓦列夫

关于cmake - 将 target_include_directories 与对象库一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31858290/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com