具有复杂 glob 的 CMake 文件 GLOB_RECURSE

CMake file GLOB_RECURSE with complex globs

我想按如下方式使用file(GLOB_RECURSE...

file(GLOB_RECURSE _tmp_files
     LIST_DIRECTORIES false
     "${mydir}/*.cpp|${mydir}/*.h")

这与 ${mydir}/*{.cpp,.h} 等变体一起产生一个空列表。 但是,这按预期工作——生成 ${mydir} 中的所有 *.cpp 文件及其子目录:

file(GLOB_RECURSE _tmp_files
     LIST_DIRECTORIES false
     "${mydir}/*.cpp")

那么,CMake 中的 file( 功能是否确实支持“完整”通配符?特别是,如何使用 file(?

匹配模式 {*.cpp,*.h}

So, does the file( feature in CMake indeed support "full" globbing?

是的。

您的表达方式与您期望的不同。 {..,..}不是glob中匹配多个后缀的方式,{ , }是字面匹配,在glob中没有特殊含义。 "${mydir}/*.cpp|${mydir}/*.h" 不是 glob 中的 OR - | 是字面匹配,它在 glob 中没有特殊含义。参见 man 7 glob

how to glob for a pattern {.cpp,.h} using file(?

写两遍

file(GLOB_RECURSE _tmp_files
     LIST_DIRECTORIES false
     ${mydir}/*.cpp
     ${mydir}/*.h
)