在这个片段中:
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(使用前将#替换为@)