C++ CMake删除包含目录

C++ CMake删除包含目录,c++,cmake,C++,Cmake,在CMake中找到include目录后,是否有任何方法可以删除该目录。我发现了类似的问题。但这个答案对我来说并没有多大意义 我需要几乎完全相同的作者上述消息。我有一个全局CMakeLists.txt文件,可以找到所有必要的include路径。然而,在一个特定子模块的CMakeLists.txt文件中,我想“隐藏”或“删除”系统包含路径,并提供替代包含路径 是的,一个解决方案可能只是简单地更改所提到的子模块中的includes,但是这个子模块是来自其他存储库的外部库,所以我不想更改其代码 如果您有

在CMake中找到include目录后,是否有任何方法可以删除该目录。我发现了类似的问题。但这个答案对我来说并没有多大意义

我需要几乎完全相同的作者上述消息。我有一个全局CMakeLists.txt文件,可以找到所有必要的include路径。然而,在一个特定子模块的CMakeLists.txt文件中,我想“隐藏”或“删除”系统包含路径,并提供替代包含路径


是的,一个解决方案可能只是简单地更改所提到的子模块中的includes,但是这个子模块是来自其他存储库的外部库,所以我不想更改其代码

如果您有能力使用较新的CMake版本(2.8.11或更高版本),请优先选择,您的大多数问题应该会立即消失

问题在于,旧的
include_目录
对目录属性有效,只有当硬盘上文件的物理布局与不同子项目中代码的逻辑组织完全匹配时,才会有效。对于更复杂的代码库,这通常很难实现,并且会导致您所描述的问题。新的
target\u include\u目录
将对目标属性起作用,这意味着文件的include目录列表将由它所属的子项目决定。这通常是考虑此类构建选项的更自然的方式

如果您使用的是较旧的CMake版本,或者由于其他原因而不得不使用
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})

所有这些全局函数在基于
target
的替代方案可用的那一刻都应该被弃用……你可能是指
string(替换${what_needs_to_go}“new_include_dirs${the_include_dirs})
@Lindydancer你当然是对的。感谢您指出。使用列表(删除项目)可从列表中删除多个项目。