可以将导入的库添加到target_link_libraries中,该库也负责包含目录

Possible to add an imported library to target_link_libraries that takes care of include directories too?

本文关键字:包含目 libraries link 导入 添加 target      更新时间:2023-10-16

不知何故,我很难确定是否可以在CMake中定义导入的库,指定目标属性(include_directories和库路径),并希望一旦我将该项目添加到另一个项目的target_link_libraries中,CMake就会附加include目录。

假设我在一个名为Module-Conf.cmake:的文件中有一个导入的库

add_library(mymodule STATIC IMPORTED)
set_target_properties(mymodule PROPERTIES IMPORTED_LOCATION "${OUTPUT_DIR}/lib")
set_target_properties(mymodule PROPERTIES INCLUDE_DIRECTORIES "${OUTPUT_DIR}/include")

在一个项目中,我添加了依赖项:

include(Module-Conf)
target_link_libraries(${PROJECT_NAME} mymodule)

CMake会将include_directories属性附加到include路径吗?现在我看不到路径,所以我似乎必须使用get_target_property自己完成它?

问题:我可以做一些CMake魔术,自动将include附加到另一个项目的include目录中吗?

非常感谢。Martin

INCLUDE_DIRECTORIES属性和INTERFACE_INCLUDE_DIRECTORIES属性之间的区别是传递性。

改为设置INTERFACE_INCLUDE_DIRECTORIES

http://www.cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#transitive-使用要求

从CMake 3.11开始,可以将target_include_directories()与IMPORTED目标一起使用。

add_library(mymodule SHARED IMPORTED)
target_include_directories(mymodule INTERFACE
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)

另一种方法是set_property(),它还允许使用生成器表达式。

set_property(TARGET mymodule PROPERTY INTERFACE_INCLUDE_DIRECTORIES
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)