Ich habe einige Konfigurationsdateien (xml, ini, ...) im config
Verzeichnis neben den Quelldateien. Wie kann ich bei jedem Projekt alle Dateien im Konfigurationsverzeichnis in das Erstellungsverzeichnis (neben der ausführbaren Datei) kopieren?
Antworten:
Sie können verwenden add_custom_command
.
Angenommen, Ihr Ziel wird aufgerufen MyTarget
, dann können Sie Folgendes tun:
add_custom_command(TARGET MyTarget PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config/ $<TARGET_FILE_DIR:MyTarget>)
Dies wird jedes Mal ausgeführt, wenn Sie MyTarget
den Inhalt von "/ config" erstellen und in das Verzeichnis kopieren, in dem die Ziel-exe / lib landen wird.
Wie Mark Lakata in einem Kommentar unten ausführt, stellt das Ersetzen PRE_BUILD
durch POST_BUILD
in add_custom_command
sicher, dass das Kopieren nur dann erfolgt, wenn der Build erfolgreich ist.
${CMAKE_COMMAND}
ist der Weg zu CMake-E
Lässt CMake Befehle ausführen, anstatt zu erstellencopy_directory
ist ein Befehlszeilen-Toolconfig
ist das Verzeichnis (das unter das Stammverzeichnis des Projekts fällt), dessen Inhalt in das Build-Ziel kopiert wird$<TARGET_FILE_DIR:MyTarget>
ist ein Generatorausdruck , der in der add_custom_command
Dokumentation beschrieben wird.make
ist klug genug, nicht einmal auszuführen, make MyTarget
wenn es feststellt, dass es unverändert ist. Wenn sich an Ihrem Ziel etwas ändert, wird make auf diesem Ziel ausgeführt und die Dateien werden kopiert.
make clean
hinzuweisen, dass die kopierten Dateien beim Bereinigen des Projekts gelöscht werden müssen?
Neben der Top-Antwort
Um das Verzeichnis selbst anstelle des Inhalts zu kopieren, können Sie /${FOLDER_NAME}
am Ende des zweiten Parameters hinzufügen .
So was:
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)
CMake unterstützt eine Dateikopie vom Shell-Typ. Dieser Link sollte für Sie hilfreich sein - Wie kopiere ich ein Verzeichnis vom Quellbaum in den Binärbaum?
In meinem Projekt verwende ich INSTALL, um in CMake anzugeben, was und wo ich meine Binärdatei mit conf-Datei verschiebe. Verwenden Sie nach der Ausführung von cmake "make install".
install()
Befehl, aber dies ist für einen speziellen Fall: Der Code wird erstellt, besteht Unit-Tests und ist für eine bestimmte Verwendungsstufe durch andere bereit. Ich installiere es nicht, um es zu debuggen.
add_executable
oder hinzugefügt wurdeadd_library
.