【问题标题】:CMake: How to copy only specific file extensions from one directory into anotherCMake:如何仅将特定文件扩展名从一个目录复制到另一个目录
【发布时间】:2012-11-18 08:10:17
【问题描述】:

我正在使用以下自定义命令将config 目录中的所有文件复制到build 目录中。问题是我不希望.svn 目录也被复制。我正在寻找一种方法来排除 .svn 目录或复制具有特定扩展名的文件。例如我只想复制带有xmlconf 扩展名的文件。我该怎么办?

add_custom_command(TARGET MyTarget PRE_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_directory
                       ${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:MyTarget>)

related question

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    要仅复制.xml.conf 文件,您可以使用file(GLOB ...) 命令:

    # Gather list of all .xml and .conf files in "/config"
    file(GLOB ConfigFiles ${CMAKE_SOURCE_DIR}/config/*.xml
                          ${CMAKE_SOURCE_DIR}/config/*.conf)
    
    foreach(ConfigFile ${ConfigFiles})
      add_custom_command(TARGET MyTarget PRE_BUILD
                         COMMAND ${CMAKE_COMMAND} -E
                             copy ${ConfigFile} $<TARGET_FILE_DIR:MyTarget>)
    endforeach()
    

    获取所有不在.svn子目录中的文件也是类似的过程:

    # Gather list of all files in "/config"
    file(GLOB ConfigFiles RELATIVE ${CMAKE_SOURCE_DIR}/config
         ${CMAKE_SOURCE_DIR}/config/*)
    
    # Gather list of all files in "/config/.svn"
    file(GLOB SvnConfigFiles RELATIVE ${CMAKE_SOURCE_DIR}/config 
         ${CMAKE_SOURCE_DIR}/config/.svn/*)
    
    # Remove ".svn" and its contents from the list
    list(REMOVE_ITEM ConfigFiles .svn ${SvnConfigFiles})
    
    foreach(ConfigFile ${ConfigFiles})
      add_custom_command(TARGET MyTarget PRE_BUILD
                         COMMAND ${CMAKE_COMMAND} -E
                             copy ${CMAKE_SOURCE_DIR}/config/${ConfigFile}
                                  $<TARGET_FILE_DIR:MyTarget>)
    endforeach()
    

    【讨论】:

    • 不是合并文件列表,而是似乎可以将所有文件类型写在一行中。
    • 是否可以有一个无需编译就可以复制文件的目标?像“make copy”这样只复制配置文件的东西。
    • 我现在才看到这条评论,已经answered it here :-)
    • 我有同样的问题,但我需要在构建后进行 GLOB。怎么办?
    • @Nick 最好提出一个新问题——评论太多了。
    猜你喜欢
    • 1970-01-01
    • 2016-07-05
    • 2012-02-15
    • 1970-01-01
    • 2017-11-18
    • 2013-06-01
    • 2020-06-22
    • 2014-08-12
    相关资源
    最近更新 更多