我有一个C++代码的目录结构,如下所示:
|
|->include
|->src
Run Code Online (Sandbox Code Playgroud)
我正在为我的代码编写一个CMakeLists.txt文件.我想明白之间的差别include_directories
,并target_include_directories
在CMake
.
它们的用法和为了添加我应该使用的包含文件路径有什么区别?
Rei*_*ica 113
include_directories(x/y)
影响目录范围.此CMakeList中的所有目标以及在其调用点之后添加的所有子目录中的目标都将将路径x/y
添加到其包含路径中.
target_include_directories(t x/y)
具有目标范围 - 它添加x/y
到目标的包含路径t
.
如果所有目标都使用相关的包含目录,则需要前者.如果路径特定于目标,或者您希望更精细地控制路径的可见性,则需要后者.后者来自于这样的事实target_include_directories()
支持PRIVATE
,PUBLIC
和INTERFACE
预选赛.
Ant*_*nio 34
除了什么Angew的答案正确地说,之间的另一个很重要的区别include_directories
,并target_include_directories
是,随着使用时PUBLIC
或INTERFACE
,后者填充INTERFACE_INCLUDE_DIRECTORIES
对象的属性.当另一个目标用于target_link_libraries
链接到原始目标时,此属性很有用,因为链接目标将自动包含添加的目录.见例子.
这个重要的功能很好地隐藏在文档中:target_include_directories提到填充INTERFACE_INCLUDE_DIRECTORIES
,其文档说:
当使用target_link_libraries()指定目标依赖项时,CMake将从所有目标依赖项中读取此属性,以确定使用者的构建属性.
小智 5
正如@Angew 所说,非常不同的是:
1、include_directories() 可被源树中的所有文件访问 2、target_include_directories() 仅在编译时可被特定目标访问。
归档时间: |
|
查看次数: |
54686 次 |
最近记录: |