限制CMake include_directories()范围?

时间:2014-07-30 22:32:31

标签: compilation cmake

所以这就是我的问题:

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

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

有更好的方法吗?我真的很想听听一些建议。

1 个答案:

答案 0 :(得分:4)

查看target_include_directories

include_directories基于目录属性,这意味着调用CMakeLists.txt的{​​{1}}的同一文件夹(或任何子文件夹)中的每个目标都将添加相应的包含目录。

另一方面,

include_directories基于目标属性,这意味着您必须为每个目标(即,项目中的每个库或可执行文件)再次调用它。优点是,这通常是指定这些依赖关系的更自然的方式。此外,指定为target_include_directories的目录将由相关目标自动提取,这是PUBLIC无法使用的功能。