gpt4 book ai didi

cmake - include_directories 和 interface_include_directories 之间有什么区别,只有头文件库

转载 作者:行者123 更新时间:2023-12-04 13:21:31 35 4
gpt4 key购买 nike

我试图了解可以在 target_include_directories 中指定的范围之间的区别,特别是 PRIVATEINTERFACE .文档说(特定上下文是仅 header 库):

The INTERFACE, PUBLIC and PRIVATE keywords are required to specify the scope of the following arguments. PRIVATE and PUBLIC items will populate the INCLUDE_DIRECTORIES property of . PUBLIC and INTERFACE items will populate the INTERFACE_INCLUDE_DIRECTORIES property of . (IMPORTED targets only support INTERFACE items.) The following arguments specify include directories.



所以基本上使用 PRIVATEINTERFACE修改 INCLUDE_DIRECTORIESINTERFACE_INCLUDE_DIRECTORIES .我确实很难理解他们两个之间的区别。来自文档中的描述 INCLUDE_DIRECTORIES好像是flag的参数 -I编译 C++ 项目时。

我完全不理解后者,有人可以澄清一下吗?

显然也使用 INTERFACE使用仅 header 库时更好,为什么?

最佳答案

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

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

我记得,这两个属性的主要用途如下:(请注意,我不是 100% 确定一切)。

一个可执行目标

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

  • 一个库目标
  • 可以有INCLUDE_DIRECTORIES使用编译此目标的文件所需的目录列表设置的属性
  • 可以有INTERFACE_INCLUDE_DIRECTORIES设置编译依赖此目标的其他目标所需的目录列表

  • 一个接口(interface)目标
  • 不能有 INCLUDE_DIRECTORIES属性设置,因为它永远不会被编译
  • 很可能有 INTERFACE_INCLUDE_DIRECTORIES set 因为它只包含头文件,所以其他依赖的目标将需要包含这些头文件

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

    关于cmake - include_directories 和 interface_include_directories 之间有什么区别,只有头文件库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52059777/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com