cmake - “填充”在 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
属性中吗?
解决方案
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
中。
推荐阅读
- google-cloud-platform - 我们如何在google cloud deploy中使用cloud build privatePool
- c - 如何创建 n 个线程,每个线程创建 n - 1 个线程
- spring-boot - Spring WebClient - 如果在 doOnError 中引发异常,则停止重试
- snowflake-cloud-data-platform - LAST_DAY('WEEK') 忽略 WEEK_OF_YEAR_POLICY 会话参数
- bash - 数据块 /dbfs 上的“树”命令
- c# - 使用 Visual Studio 代码时如何查找符号的定义?
- sql - 在最初使用多格式逻辑文件的 RPGLE 程序中检索 DB2 记录的最佳实践是什么?
- python-3.x - 如何将“和”搜索运算符添加到 odoo XML-RPC api 调用?
- html - 如何在多个网格上制作内容?
- javascript - Casl Prisma 可以用 vanilla Javascript 编写还是需要 Typescript?