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

Cal*_*vin 25 glob file list concatenation cmake

我有一个使用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()
Run Code Online (Sandbox Code Playgroud)

现在我想从不同的文件夹中复制更多文件.因此,我们希望从两个复制文件path/to/filespath/to/files2以二进制文件夹中的同一个地方.一种方法是复制上面的代码,但似乎没有必要复制冗长的自定义命令.

是否有一种简单的方法可以使用file(也可能是list命令)来连接两个GLOB列表?

sak*_*kra 37

file(GLOB ...)命令允许指定多个globbing表达式:

file (GLOB files "path/to/files/*" "path/to/files2*")
Run Code Online (Sandbox Code Playgroud)

或者,使用list APPEND子命令来合并列表,例如:

file (GLOB files "path/to/files/*")
file (GLOB files2 "path/to/files2*")
list (APPEND files ${files2})
Run Code Online (Sandbox Code Playgroud)


ant*_*kos 31

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

file(GLOB files1 "path/to/files1/*")
file(GLOB files2 "path/to/files2/*")
set(files ${files1} ${files2})
Run Code Online (Sandbox Code Playgroud)

  • 这对于将GLOB与GLOB_RECURSE混合很有用 (2认同)