如何列出目标的 PRIVATE、PUBLIC 和 INTERFACE 包含目录?
How can I list the PRIVATE, PUBLIC and INTERFACE include directories of a target?
本题:
Listing include_directories in CMake
教我们如何列出 CMake 目录的包含目录。我们如何为 target 执行此操作,并分离 PUBLIC、PRIVATE 和 INTERFACE 目录?
好吧,相同的 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-dirs2 (dirs1 ∖ dirs2)。
INTERFACE
目录是dirs2 set-dirs1 (dirs2 ∖ dirs1)。
如您链接到的问题中所述,获得目录列表后,您可以像这样打印出来:
foreach(dir ${dirs2})
message(STATUS "Interface include directory for my_target: ${dir}")
endforeach()
如果您需要实际、具体地生成三个列表 - 请参阅 了解如何执行并集、交集和差集。
本题:
Listing include_directories in CMake
教我们如何列出 CMake 目录的包含目录。我们如何为 target 执行此操作,并分离 PUBLIC、PRIVATE 和 INTERFACE 目录?
好吧,相同的 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-dirs2 (dirs1 ∖ dirs2)。INTERFACE
目录是dirs2 set-dirs1 (dirs2 ∖ dirs1)。
如您链接到的问题中所述,获得目录列表后,您可以像这样打印出来:
foreach(dir ${dirs2})
message(STATUS "Interface include directory for my_target: ${dir}")
endforeach()
如果您需要实际、具体地生成三个列表 - 请参阅