所以这就是我的问题:
我喜欢(无论出于何种原因,如果有更好的方法,我愿意改变)将我的代码拆分为目录树结构,并将头文件放在与相应源文件相同的目录中。这工作正常,除了我需要添加目录。当我添加一个新目录时,我用新目录作为参数调用include_directories()
。
调用include_directories
会导致编译器包含每个文件的目录(即-I NEW_DIRECTORY
),无论该文件是否实际依赖于该目录中的头文件。这会触发重新构建整个代码,这是非常不受欢迎的。
有更好的方法吗?我真的很想听听一些建议。
答案 0 :(得分:4)
include_directories
基于目录属性,这意味着调用CMakeLists.txt
的{{1}}的同一文件夹(或任何子文件夹)中的每个目标都将添加相应的包含目录。
include_directories
基于目标属性,这意味着您必须为每个目标(即,项目中的每个库或可执行文件)再次调用它。优点是,这通常是指定这些依赖关系的更自然的方式。此外,指定为target_include_directories
的目录将由相关目标自动提取,这是PUBLIC
无法使用的功能。