2012-11-18 111 views
6

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

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

related question

回答

10

只复制.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() 
+0

比非常感谢你! – Meysam

+0

@Meysam没问题:-) – Fraser

+0

而不是合并文件列表,似乎可以在一行中写入所有文件类型。 – Meysam

相关问题