【问题标题】:What is the default privacy/scope setting for include_directories?include_directories 的默认隐私/范围设置是什么?
【发布时间】:2019-08-14 19:15:21
【问题描述】:
我了解target_include_directories() 可以与PUBLIC、INTERFACE 或PRIVATE 结合使用,以指定目录的范围或隐私。但是很多过时的代码仍然使用include_directories(),我不确定使用它们的目标是如何处理这些目录的。
使用include_directories() 与使用target_include_directories(MyTarget PRIVATE ...) 基本相同吗?我见过this 类似的问题,但是include_directories() 也没有默认 范围界定行为吗?
【问题讨论】:
标签:
cmake
scope
dependencies
include
【解决方案1】:
使用include_directories() 与使用target_include_directories(MyTarget PRIVATE ...) 基本相同吗?
是的,对于每个受include_directories影响的目标(即在当前CMakeLists.txt及以下),它与特定目标版本中的PRIVATE关键字具有相同的效果命令。
Documentation for include_directories 表示,该命令分配目标和目录的INCLUDE_DIRECTORIES 属性:
包含目录被添加到当前CMakeLists 文件的INCLUDE_DIRECTORIES 目录属性中。它们还会添加到当前CMakeLists 文件中每个目标的INCLUDE_DIRECTORIES 目标属性中。
还有目录属性affects 在其他目标的目录上:
此属性用于填充INCLUDE_DIRECTORIES 目标属性。
通过target_include_directories 命令的PRIVATE 关键字精确定位INCLUDE_DIRECTORIES 目标属性is affected:
PRIVATE 和 PUBLIC 项目将填充 <target> 的 INCLUDE_DIRECTORIES 属性。 PUBLIC 和 INTERFACE 项目将填充<target> 的INTERFACE_INCLUDE_DIRECTORIES 属性。