【问题标题】:How can I merge multiple lists of files together with CMake?如何将多个文件列表与 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 列表?

【问题讨论】:

    标签: file list cmake concatenation 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 很有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2018-10-27
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多