2012-11-18 12 views
6

Ich verwende den folgenden benutzerdefinierten Befehl, um alle Dateien im Verzeichnis config in das Verzeichnis build zu kopieren. Das Problem ist, dass ich das .svn Verzeichnis auch nicht kopieren möchte. Ich suche nach einer Möglichkeit, entweder das .svn Verzeichnis auszuschließen oder Dateien mit spezifischer Erweiterung zu kopieren. z.B. Ich möchte nur Dateien mit xml oder conf Erweiterungen kopiert werden. Was soll ich machen?CMake: So kopieren Sie nur bestimmte Dateierweiterungen von einem Verzeichnis in ein anderes

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

related question

Antwort

10

So kopieren Sie einfach die .xml und .conf Dateien, können Sie den file(GLOB ...) Befehl verwenden:

# 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() 

Es ist ein ähnlicher Prozess alle Dateien nicht im .svn Unterverzeichnis zu erhalten:

# 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

Als k du sehr! – Meysam

+0

@Meysam Kein Problem :-) – Fraser

+0

Anstatt die Liste der Dateien zusammenzuführen, scheint es möglich zu sein, alle Dateitypen in einer Zeile zu schreiben. – Meysam

Verwandte Themen