【发布时间】:2020-01-03 11:38:49
【问题描述】:
这个问题:
Listing include_directories in CMake
教我们如何列出 CMake 目录的包含目录。我们如何为 target 执行此操作,并将 PUBLIC、PRIVATE 和 INTERFACE 目录分开?
【问题讨论】:
标签: debugging cmake include-path
这个问题:
Listing include_directories in CMake
教我们如何列出 CMake 目录的包含目录。我们如何为 target 执行此操作,并将 PUBLIC、PRIVATE 和 INTERFACE 目录分开?
【问题讨论】:
标签: debugging cmake include-path
嗯,相同的 getter 可以用于目录和目标,只是语法略有不同:
get_property(dirs1 TARGET my_target PROPERTY INCLUDE_DIRECTORIES)
现在,这将使我们得到两组包含目录的联合:PUBLIC 和PRIVATE,但不是INTERFACE。我们还得到:
get_property(dirs2 TARGET my_target PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
现在:
PUBLIC 目录是 dirs1 与 dirs2 的交集 (dirs1 ∩ dirs2)。PRIVATE 目录是 dirs1 set-minus dirs2 (dirs1 ∖ dirs2)。INTERFACE 目录是 dirs2 set-minus dirs1 (dirs2 ∖ dirs1)。如您链接到的问题中所述,一旦您有了目录列表,就可以像这样打印出来:
foreach(dir ${dirs2})
message(STATUS "Interface include directory for my_target: ${dir}")
endforeach()
如果您需要实际、具体地生成三个列表 - 请参阅 this question 了解如何执行并集、交集和差集。
【讨论】: