【问题标题】:How can I list the PRIVATE, PUBLIC and INTERFACE include directories of a target?如何列出目标的 PRIVATE、PUBLIC 和 INTERFACE 包含目录?
【发布时间】:2020-01-03 11:38:49
【问题描述】:

这个问题:

Listing include_directories in CMake

教我们如何列出 CMake 目录的包含目录。我们如何为 target 执行此操作,并将 PUBLIC、PRIVATE 和 INTERFACE 目录分开?

【问题讨论】:

    标签: debugging cmake include-path


    【解决方案1】:

    嗯,相同的 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-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 了解如何执行并集、交集和差集。

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2022-07-10
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 2021-12-15
      相关资源
      最近更新 更多