如何与CMake一起合并多个文件列表?

时间:2011-09-23 18:48:18

标签: file list cmake concatenation glob

我有一个使用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列表?

2 个答案:

答案 0 :(得分:34)

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})

答案 1 :(得分:29)

我为每个模式构建一个列表,然后连接列表:

file(GLOB files1 "path/to/files1/*")
file(GLOB files2 "path/to/files2/*")
set(files ${files1} ${files2})