首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CMake中,include_directories和target_include_directories有什么不同?

在CMake中,include_directories和target_include_directories有什么不同?
EN

Stack Overflow用户
提问于 2015-08-12 23:28:12
回答 3查看 107.8K关注 0票数 189

我的C++代码有一个目录结构,如下所示:

代码语言:javascript
复制
|
|->include
|->src

我正在为我的代码编写一个CMakeLists.txt文件。我想了解一下CMakeinclude_directoriestarget_include_directories的区别。

它们的用法有什么不同,为了添加我的包含文件路径,我应该使用哪一个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-12 23:31:38

include_directories(x/y)会影响目录范围。此CMakeList中的所有目标,以及在其调用点之后添加的所有子目录中的目标,都将路径x/y添加到它们的包含路径中。

target_include_directories(t x/y)具有目标作用域-它将x/y添加到目标t的包含路径中。

如果您的所有目标都使用相关的include目录,则需要使用前一个目录。如果路径特定于目标,或者如果您希望更好地控制路径的可见性,则需要使用后一种方法。后者是因为target_include_directories()支持PRIVATEPUBLICINTERFACE限定符。

票数 209
EN

Stack Overflow用户

发布于 2016-10-25 23:53:09

除了Angew's answer所说的正确之外,include_directoriestarget_include_directories之间的另一个非常重要的区别是,当与PUBLICINTERFACE一起使用时,后者会填充目标的INTERFACE_INCLUDE_DIRECTORIES属性。当另一个目标使用target_link_libraries链接到原始目标时,此属性很有用,因为链接目标将自动添加那些包含目录的目录。参见example

这个重要的特性在文档中隐藏得很好:target_include_directories提到填充INTERFACE_INCLUDE_DIRECTORIES,它的documentation说:

使用target_link_libraries()指定目标依赖项时,CMake将从所有目标依赖项中读取此属性,以确定使用者的生成属性。

票数 61
EN

Stack Overflow用户

发布于 2018-12-29 18:00:59

正如@Angew所说,最大的区别是:

1,include_directories()对源代码中的所有文件都是可访问的-树2,target_include_directories() -只有在编译时才能对特定的目标文件访问。

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

https://stackoverflow.com/questions/31969547

复制
相关文章

相似问题

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