首页 > 解决方案 > “填充”在 CMake 文档中实际上做了什么?

问题描述

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

target_include_directories([SYSTEM] [之前]
<INTERFACE|PUBLIC|PRIVATE> [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

...

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

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

标签: cmake

解决方案


PRIVATE 和 PUBLIC 项目将填充 <target> 的 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

我认为那里的“填充”一词可以替换为“追加”而不会失去意义。

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

使用来自其他目标的INTERFACE_INCLUDE_DIRECTORIES的内容。

例如 target_include_directories(A PUBLIC B),这里的“填充 INCLUDE_DIRECTORIES”是否意味着将 B 的 INCLUDE_DIRECTORIES 属性复制到 A 的 INCLUDE_DIRECTORIES 属性中?

意味着将 B's 附加INTERFACE_INCLUDE_DIRECTORIES到 A'sINCLUDE_DIRECTORIES和 A'sINTERFACE_INCLUDE_DIRECTORIES中。


推荐阅读