CMake中file(GLOB_RECURSE如何匹配cpp、h等多种后缀的文件
CMake的file()命令的通配功能不支持Shell风格的{*.cpp,*.h}大括号扩展,也不支持|作为多规则分隔符,你尝试的这两种写法不符合CMake的通配语法,所以返回空列表是正常现象。
正确实现多后缀匹配的方法
file(GLOB_RECURSE)本身支持传入多个匹配模式,符合任意一个模式的文件都会被加入结果列表,你可以直接按如下方式编写:
file(GLOB_RECURSE _tmp_files LIST_DIRECTORIES false "${mydir}/*.cpp" "${mydir}/*.h" )
如果需要匹配的后缀数量较多,可以先统一定义后缀列表再生成匹配规则,示例如下:
# 可根据需求自行增减匹配后缀 set(MATCH_SUFFIXES cpp h hpp cc cxx) foreach(suffix ${MATCH_SUFFIXES}) list(APPEND GLOB_PATTERNS "${mydir}/*.${suffix}") endforeach() file(GLOB_RECURSE _tmp_files LIST_DIRECTORIES false ${GLOB_PATTERNS} )
注意:CMake官方不推荐使用
GLOB_RECURSE收集项目源文件,如果你新增/删除了匹配目录下的文件,CMake不会自动感知到变更,必须手动重新执行CMake生成指令才会更新文件列表。
内容的提问来源于stack exchange,提问作者Ilonpilaaja
相关产品推荐
相关产品推荐

