target_link_libraries 和 INCLUDE_DIRECTORIES 属性

2024-05-12

在这个片段中:

cmake_minimum_required(VERSION 3.0)
project(hello LANGUAGES C VERSION 0.0.1)
add_library(a INTERFACE)
target_include_directories(a INTERFACE /usr/local/include)
add_executable(b main.c)
target_link_libraries(b PUBLIC a)
get_target_property(dirs b INCLUDE_DIRECTORIES)
message(STATUS "dirs: ${dirs}")

CMake 将打印:

-- dirs: dirs-NOTFOUND

I want all包括目标的目录,但显然是通过添加的target_link_libraries以某种方式被忽视。如何获取目标的所有包含目录?


问题是您正在寻找的信息仅在生成步骤之后才可用。你只能通过例如获得这些add_custom_target() https://cmake.org/cmake/help/latest/command/add_custom_target.html调用,在编译时运行。你的get_target_property() and message()调用在 CMake 配置步骤期间运行。

免责声明:对下面链接的问题进行了一些小修改:

add_custom_command(
    b_lists ALL
    ${CMAKE_COMMAND} -E echo "b INCLUDE_DIRECTORIES: $<TARGET_PROPERTY:B,INCLUDE_DIRECTORIES>"
)

参考

  • CMake 中 LINK_LIBRARIES 的递归列表 https://stackoverflow.com/questions/32756195/recursive-list-of-link-libraries-in-cmake
  • target_include_directories 2.8.12 之前的版本? https://stackoverflow.com/questions/37900332/target-include-directories-prior-to-2-8-12
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

target_link_libraries 和 INCLUDE_DIRECTORIES 属性 的相关文章

随机推荐