我的C++代码有一个目录结构,如下所示:
|
|->include
|->src我正在为我的代码编写一个CMakeLists.txt文件。我想了解一下CMake中include_directories和target_include_directories的区别。
它们的用法有什么不同,为了添加我的包含文件路径,我应该使用哪一个?
发布于 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()支持PRIVATE、PUBLIC和INTERFACE限定符。
发布于 2016-10-25 23:53:09
除了Angew's answer所说的正确之外,include_directories和target_include_directories之间的另一个非常重要的区别是,当与PUBLIC或INTERFACE一起使用时,后者会填充目标的INTERFACE_INCLUDE_DIRECTORIES属性。当另一个目标使用target_link_libraries链接到原始目标时,此属性很有用,因为链接目标将自动添加那些包含目录的目录。参见example。
这个重要的特性在文档中隐藏得很好:target_include_directories提到填充INTERFACE_INCLUDE_DIRECTORIES,它的documentation说:
使用target_link_libraries()指定目标依赖项时,CMake将从所有目标依赖项中读取此属性,以确定使用者的生成属性。
发布于 2018-12-29 18:00:59
正如@Angew所说,最大的区别是:
1,include_directories()对源代码中的所有文件都是可访问的-树2,target_include_directories() -只有在编译时才能对特定的目标文件访问。
https://stackoverflow.com/questions/31969547
复制相似问题