【问题标题】:What does "populate" actually do in CMake documents?“填充”在 CMake 文档中实际上做了什么?
【发布时间】:2020-10-29 18:11:57
【问题描述】:

当 CMake 文档说“填充属性”时,我总是感到困惑。例如在

target_include_directories( [系统] [之前]
[items1...] [ [项目2...] ...])

...

PRIVATE 和 PUBLIC 项目将填充 INCLUDE_DIRECTORIES 的属性。

我不确定用什么填充“INCLUDE_DIRECTORIES”属性? 比如target_include_directories(A PUBLIC B),这里的'populate INCLUDE_DIRECTORIES'是指将B的INCLUDE_DIRECTORIES属性复制到A的INCLUDE_DIRECTORIES属性中吗?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    PRIVATE 和 PUBLIC 项目将填充 的 INCLUDE_DIRECTORIES 属性。

    大概是这样:

    set(mode "PRIVATE") # or PUBLIC, from target_include_directories arguments
    
    # Get interface include directories
    target_get_proprety(incdirs B INTERFACE_INCLUDE_DIRECTORIES)
    
    if(mode STREQUAL "PUBLIC" OR mode STREQUAL "PRIVATE")
        set_properties(TARGET A APPEND PROPERTY INCLUDE_DIRECTORIES ${incdirs})
    endif()
    
    # when mode is PUBLIC or INTERFACE, they get also added to A's INTERFACE_INCLUDE_DIRECTORIES
    

    我认为那里的“populate”这个词可以用“append”代替而不会失去意义。

    我不确定用什么填充“INCLUDE_DIRECTORIES”属性?

    带有来自另一个目标的INTERFACE_INCLUDE_DIRECTORIES的内容。

    例如target_include_directories(A PUBLIC B),这里的'populate INCLUDE_DIRECTORIES'是指将B的INCLUDE_DIRECTORIES属性复制到A的INCLUDE_DIRECTORIES属性中吗?

    意味着将 B 的 INTERFACE_INCLUDE_DIRECTORIES 附加到 A 的 INCLUDE_DIRECTORIES 和 A 的 INTERFACE_INCLUDE_DIRECTORIES 中。

    【讨论】:

    • 嗨,KamilCuk,在 target_include_directories(A PUBLIC B) 的情况下,为什么 B 的 INCLUDE_DIRECTORIES 不复制到 A 的 INCLUDE_DIRECTORIES
    • 哦,好吧,因为他们没有? INCLUDE_DIRECTORIES 专用于 B 使用。 (但在幕后真正发生的是,字符串“B”仅添加到 A 的 INTERFACE_LINK_LIBRARIES 中,然后当 A 编译通过这些属性进行 cmake 搜索时,如果它是目标,则添加 INTERFACE_*要编译的东西。(或类似的东西))
    • 哦,所以无论在什么情况下(公共、私人、接口),B 的INCLUDE_DIRECTORIES 都不会“填充”到 A 的任何属性,对吧?也就是说,A只关心B的INTERFACE_INCLUDE_DIRECTORIES,不关心B的INCLUDE_DIRECTORIES
    • 据我所知 cmake:对。是的。
    • 给我的感觉是规则类似于C++的public/private字段和public/private继承。
    猜你喜欢
    • 1970-01-01
    • 2013-06-02
    • 2020-11-21
    • 2015-02-26
    • 2017-06-29
    • 2013-06-13
    • 2021-10-25
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多