如何将多个文件列表与 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/filespath/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 合并在一起?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个清单文件嵌入/合并到 C# 应用程序中?

将 CMake 与同一语言的多个编译器一起使用

多个文件夹怎么按照顺序每三个合并到一起?

如何合并多个文件夹

如何快速合并多个TXT文件?合并多个TXT文件方法步骤

怎样将以保存下来多个.html文件合并在一起生成1个.html文件?