target_link_libraries和INCLUDE_DIRECTORIES属性

时间:2017-04-22 01:02:19

标签: cmake

在此片段中:

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

我希望所有包含目标的目录,但显然那些通过target_link_libraries添加的目录会被忽略。如何获取目标的所有包含目录?

2 个答案:

答案 0 :(得分:2)

问题是您所寻求的信息仅在生成步骤之后才可用。你可以只用例如add_custom_target()次调用,在编译期间运行。您的get_target_property()message()来电在CMake配置步骤中运行。

免责声明:对以下链接的问题进行少量修改:

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

<强>参考

答案 1 :(得分:0)

target_link_libraries不添加任何目录,它会添加您包含的特定库。使用make VERBOSE = 1查看完整命令。您可以通过读取构建目录或库输出名称来获取库输出目录。