一旦在 CMake 中找到 include 目录,有什么方法可以删除吗?我发现了类似的问题 here .但答案对我来说意义不大。
我需要与上述消息的作者几乎完全相同的信息。我有一个全局 CMakeLists.txt 文件,它可以找到所有必要的包含路径。但是在一个特定子模块的 CMakeLists.txt 文件中,我想“隐藏”或“删除”系统包含路径并提供替代包含路径。
是的,一个解决方案可能只是简单地更改提到的子模块中的包含,但是这个子模块是来自其他存储库的外部库,所以我不想更改它的代码。
最佳答案
如果您有能力使用较新的 CMake 版本(2.8.11 或更高版本),请选择 target_include_directories
在 include_directories
你的大部分问题都会立即消失。
问题是旧的 include_directories
作用于目录属性,只有当硬盘上文件的物理布局与不同子项目中代码的逻辑组织完全匹配时才有效.对于更复杂的代码库,这通常很难实现,并会导致您所描述的问题。新的 target_include_directories
而是作用于目标属性,这意味着文件的包含目录列表由文件所属的子项目决定。这通常是考虑此类构建选项的更自然的方式。
如果您受困于较旧的 CMake 版本,或者出于其他原因必须使用 include_directories
(这里可能就是这种情况,如果问题出在您无法更改的外部库上),你可以试试tinkering与 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})
关于c++ - CMake 删除包含目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24031127/