Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation 是否限制CMake include_directories()范围?_Compilation_Cmake - Fatal编程技术网

Compilation 是否限制CMake include_directories()范围?

Compilation 是否限制CMake include_directories()范围?,compilation,cmake,Compilation,Cmake,所以我的问题是: 我喜欢(无论出于何种原因,如果有更好的方法,我愿意更改)将我的代码拆分为目录树结构,并将头文件放在与相应源文件相同的目录中。这很好,除了需要添加目录的时候。当我添加一个新目录时,我使用新目录作为参数调用include\u directories() 调用include_directories会导致编译器包含每个文件的目录(即-i NEW_directory),而不管该文件是否实际依赖于该目录中的头文件。这会触发整个代码的重新构建,这是非常不受欢迎的 有更好的办法吗?我真的很想听

所以我的问题是:

我喜欢(无论出于何种原因,如果有更好的方法,我愿意更改)将我的代码拆分为目录树结构,并将头文件放在与相应源文件相同的目录中。这很好,除了需要添加目录的时候。当我添加一个新目录时,我使用新目录作为参数调用
include\u directories()

调用
include_directories
会导致编译器包含每个文件的目录(即
-i NEW_directory
),而不管该文件是否实际依赖于该目录中的头文件。这会触发整个代码的重新构建,这是非常不受欢迎的

有更好的办法吗?我真的很想听听你的建议。

看看

include_目录
基于目录属性,这意味着调用
include_目录
CMakeLists.txt
的同一文件夹(或任何子文件夹)中的每个目标都将添加相应的include目录

另一方面,
target\u include\u目录
基于目标属性,这意味着您必须为每个目标(即项目中的每个库或可执行文件)再次调用它。优点是,这通常是指定这些依赖关系的更自然的方式。此外,指定为
PUBLIC
的目录将由相关目标自动拉入,这是
include\u目录

中不可用的功能。请查看

include_目录
基于目录属性,这意味着调用
include_目录
CMakeLists.txt
的同一文件夹(或任何子文件夹)中的每个目标都将添加相应的include目录


另一方面,
target\u include\u目录
基于目标属性,这意味着您必须为每个目标(即项目中的每个库或可执行文件)再次调用它。优点是,这通常是指定这些依赖关系的更自然的方式。此外,指定为
PUBLIC
的目录将由相关目标自动拉入,这是
include\u目录

无法使用的功能。如何将target\u include\u目录()与add\u子目录()一起使用?如何将target\u include\u目录()与add\u子目录()一起使用?