在此片段中:
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
添加的目录会被忽略。如何获取目标的所有包含目录?
答案 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查看完整命令。您可以通过读取构建目录或库输出名称来获取库输出目录。