cmake file glob 正则表达式
cmake的文件GLOB命令可以使用通配符来匹配文件,但不支持正则表达式。
但是,你可以使用CMake内置的字符串操作函数来实现类似正则表达式的功能,例如使用`string(REGEX MATCH ...)`和`string(REGEX MATCHALL ...)`命令。
下面是一个例子,其中使用了`string(REGEX MATCHALL ...)`命令来匹配所有以`.cpp`或`.c`结尾的文件:
cmake
file(GLOB_RECURSE SOURCES "src/*.cpp" "src/*.c")
正则化工具包set(REGEX_CPP_FILES "")
set(REGEX_C_FILES "")
foreach(SOURCE {SOURCES})
string(REGEX MATCH "\\.cpp" IS_CPP_FILE {SOURCE})
if(IS_CPP_FILE)
list(APPEND REGEX_CPP_FILES {SOURCE})
endif()
string(REGEX MATCH "\\.c" IS_C_FILE {SOURCE})
if(IS_C_FILE)
list(APPEND REGEX_C_FILES {SOURCE})
endif()
endforeach()
message(STATUS "CPP Files: {REGEX_CPP_FILES}")
message(STATUS "C Files: {REGEX_C_FILES}")
在上面的例子中,`file(GLOB_RECURSE ...)`命令首先用通配符匹配所有的`.cpp`和`.c`文件,然后使用`string(REGEX MATCH ...)`命令来判断每个文件是否以`.cpp`或`.c`结尾。根据判断结果,将文件添加到相应的变量中,并最终输出文件列表。
注意,使用`file(GLOB_RECURSE ...)`命令不太推荐,因为它在构建时是不会更新的。建议使用显式列出所有源文件的方式来管理源文件列表。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论