CMake:list(REMOVE_ITEM)不处理转义\#

时间:2018-03-13 21:14:48

标签: c++ cmake

我与使用emacs的开发人员合作 - 因此,他们有时会生成交换文件(调用一个#cmaketest.cpp),其中包含标记为

的目录中的井号字符
file(GLOB_RECURSE MY_SOURCES my/dir/*.cpp). 

为了防止编译这些文件,我希望能够:

list(REMOVE_ITEM MY_SOURCES \#*)

这个CMakeFile成功编译,但在Make上失败,并且对生成的Makefile的检查显示了对。的引用 #cmaketest.cpp,它不应该。

这可以通过下面的MWE重现:

cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
project(libcmaketest)

file(GLOB_RECURSE TEST_SOURCES ${PROJECT_SOURCE_DIR}/*.cpp)
list(REMOVE_ITEM TEST_SOURCES \#*)
add_library(cmaketest ${TEST_SOURCES})
target_include_directories(cmaketest PRIVATE ${PROJECT_SOURCE_DIR})

PROJECT_SOURCE_DIR中的一个名为

的文件
#cmaketest.cpp

我是否会失去理智?我只是没有正确地逃避这个角色,我是否从根本上误解了列表(REMOVE_ITEM)的工作原理? target_include_directories命令是否有问题?谢谢!

1 个答案:

答案 0 :(得分:0)

是的,我正在失去理智。 FILTER用于删除正则表达式匹配的列表项,而不是REMOVE_ITEM。