如何将多个文件列表与 CMake 合并在一起?
Posted
技术标签:
【中文标题】如何将多个文件列表与 CMake 合并在一起?【英文标题】:How can I merge multiple lists of files together with CMake? 【发布时间】:2011-11-23 21:54:28 【问题描述】:我有一个使用 CMake 构建的项目,需要将一些资源复制到目标文件夹。目前我使用这个代码:
file(GLOB files "path/to/files/*")
foreach(file $files)
ADD_CUSTOM_COMMAND(
TARGET MyProject
POST_BUILD
COMMAND $CMAKE_COMMAND -E copy "$file" "$CMAKE_BINARY_DIR/Debug"
)
endforeach()
现在我想从其他文件夹复制更多文件。所以我们想将文件从path/to/files
和path/to/files2
复制到二进制文件夹中的相同位置。一种方法是只复制上面的代码,但似乎没有必要复制冗长的自定义命令。
有没有一种简单的方法来使用file
(可能还有list
命令)来连接两个GLOB
列表?
【问题讨论】:
【参考方案1】:file (GLOB ...)
命令允许指定多个通配表达式:
file (GLOB files "path/to/files/*" "path/to/files2*")
或者,使用list (APPEND ...)
子命令来合并列表,例如:
file (GLOB files "path/to/files/*")
file (GLOB files2 "path/to/files2*")
list (APPEND files $files2)
【讨论】:
如果我没记错的话,这实际上会执行两个单独的 glob。有没有办法让 CMake 只执行一个 glob,就像在 shell 中使用extglob
一样?不幸的是,这不起作用:file(GLOB_RECURSE files *.ext1,ext2,ext3)
【参考方案2】:
我会为每个模式构建一个列表,然后将这些列表连接起来:
file(GLOB files1 "path/to/files1/*")
file(GLOB files2 "path/to/files2/*")
set(files $files1 $files2)
【讨论】:
这对于混合 GLOB 和 GLOB_RECURSE 很有用以上是关于如何将多个文件列表与 CMake 合并在一起?的主要内容,如果未能解决你的问题,请参考以下文章