如何列出目标的 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)

现在,这将使我们得到两组包含目录的联合:PUBLICPRIVATE,但不是 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()

如果您需要实际、具体地生成三个列表 - 请参阅 了解如何执行并集、交集和差集。