首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有头库的include_directories和interface_include_directories有什么区别?

只有头库的include_directories和interface_include_directories有什么区别?
EN

Stack Overflow用户
提问于 2018-08-28 14:02:21
回答 1查看 1.6K关注 0票数 3

我试图理解在target_include_directories中可以指定的作用域之间的区别,特别是PRIVATEINTERFACE。文档说明(特定的上下文仅为标头库):

需要接口、公共关键字和私有关键字来指定下列参数的范围。私有和公共项将填充INCLUDE_DIRECTORIES属性。的INTERFACE_INCLUDE_DIRECTORIES属性中的公共项和接口项。(导入的目标只支持接口项。)下列参数指定包含目录。

因此,使用PRIVATEINTERFACE基本上可以修改INCLUDE_DIRECTORIESINTERFACE_INCLUDE_DIRECTORIES。我确实很难理解他们之间的区别。从文档中的描述来看,INCLUDE_DIRECTORIES似乎是编译C++项目时标志C++的参数。

我完全不明白后者的意思,有人能澄清吗?

而且,如果只使用标头库,显然使用INTERFACE更好,为什么呢?

EN

回答 1

Stack Overflow用户

发布于 2018-08-28 14:21:35

接口目标仅用于标头库。声明这样的目标不会在编译时产生任何内容(CMake不会为这些目标生成生成对象、可执行文件或库的规则)。

因此,CMake需要区分将用于编译生成对象的目标的标头。

正如我所记得的,这两个属性的主要用途如下:(请注意,我不是100%肯定所有的东西)。

可执行目标

  • 可以使用编译此目标的文件所需的目录列表来设置INCLUDE_DIRECTORIES属性。
  • 不能设置INTERFACE_INCLUDE_DIRECTORIES,因为其他目标不能依赖可执行目标(我不确定)

A库目标

  • 可以使用编译此目标的文件所需的目录列表来设置INCLUDE_DIRECTORIES属性。
  • 可以将INTERFACE_INCLUDE_DIRECTORIES设置为编译依赖于此目标的其他目标所需的目录列表。

接口目标

  • 不能设置INCLUDE_DIRECTORIES属性,因为它永远不会被编译
  • 很可能设置了INTERFACE_INCLUDE_DIRECTORIES,因为它只包含头文件,因此其他依赖的目标需要包含这些头文件。

由于这是一个困难的问题,而且很多人都在问这个问题,我将尽快将这个答案转化为社区的答案,因此通过迭代精化,我们有望找到一种正确解释这一点的方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52059777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档