target_include_directories我试图理解可以在 中具体指定的范围PRIVATE和INTERFACE. 文档说(特定上下文是仅标头库):
需要 INTERFACE、PUBLIC 和 PRIVATE 关键字来指定以下参数的范围。PRIVATE 和 PUBLIC 项将填充 的 INCLUDE_DIRECTORIES 属性。PUBLIC 和 INTERFACE 项将填充 的 INTERFACE_INCLUDE_DIRECTORIES 属性。(IMPORTED 目标仅支持 INTERFACE 项。)以下参数指定包含目录。
所以基本上使用PRIVATEorINTERFACE修改INCLUDE_DIRECTORIESor INTERFACE_INCLUDE_DIRECTORIES。我确实很难理解他们两者之间的区别。从文档中的描述来看,似乎是编译 C++ 项目时INCLUDE_DIRECTORIES标志的参数。-I
后者我完全不明白,有人可以澄清吗?
显然,INTERFACE当使用仅标头库时,使用更好,为什么呢?
接口目标仅适用于标头库。声明此类目标不会在编译时生成任何内容(CMake 不会生成规则来为这些目标生成对象、可执行文件或库)。
因此,CMake 需要区分用于编译生成对象的目标的标头。
我记得,这两个属性的主要用途如下:(请注意,我并不是 100% 确定所有事情)。
可执行目标
INCLUDE_DIRECTORIES为此目标编译文件所需的目录列表设置属性INTERFACE_INCLUDE_DIRECTORIES设置,因为其他目标不能依赖于可执行目标(我不确定)库目标
INCLUDE_DIRECTORIES为此目标编译文件所需的目录列表设置属性INTERFACE_INCLUDE_DIRECTORIES包含编译依赖于此目标的其他目标所需的目录列表接口目标
INCLUDE_DIRECTORIES设置属性,因为它永远不会被编译INTERFACE_INCLUDE_DIRECTORIES集,因为它仅包含头文件,因此依赖的其他目标将需要包含这些头文件由于这是一个很难的问题,而且很多人都在问这个问题,我会尽快将这个答案转化为社区答案,因此通过迭代细化,我们希望找到一种方法来正确解释这一点。
| 归档时间: |
|
| 查看次数: |
2173 次 |
| 最近记录: |