有没有办法在CMake中找到包含目录后删除.我发现类似的问题在这里.但回答对我来说没有多大意义.
我需要与上述消息的作者几乎完全相同.我有一个全局CMakeLists.txt文件,它找到所有必要的包含路径.但是在一个特定子模块的CMakeLists.txt文件中,我想"隐藏"或"删除"系统包含路径并提供替代包含路径.
是的,一个解决方案可能只是简单地改变包含在提到的子模块中,但是这个子模块是来自其他存储库的外部库,所以我不想改变它的代码.
如果你能负担得起使用较新版本的CMake(2.8.11或更高版本),更喜欢target_include_directories在include_directories和大部分的问题应该消失的时候了.
问题是,旧include_directories的目录属性,能够统计出只有在硬盘上的文件的物理布局的代码在不同的子项目的逻辑组织完全匹配的作品.对于更复杂的代码库,这通常很难实现,并导致像您描述的那样的问题.新的target_include_directories替代工作在目标属性上,这意味着文件的包含目录列表由它所属的子项目决定.这通常是考虑这种构建选项的更自然的方式.
如果您遇到较旧的CMake版本或者您必须使用include_directories其他原因(这可能是这种情况,如果问题是您无法更改的外部库),您可以尝试修改正在使用的INCLUDE_DIRECTORIES目录属性由include_directories命令设置,但准备好一些摆弄:
get_property(the_include_dirs DIRECTORY foo PROPERTY INCLUDE_DIRECTORIES)
string(REPLACE ${what_needs_to_go} "" new_include_dirs ${the_include_dirs})
set_property(DIRECTORY foo PROPERTY INCLUDE_DIRECTORIES ${new_include_dirs})
Run Code Online (Sandbox Code Playgroud)