Ich habe einige Konfigurationsdateien (xml, ini, ...) im configVerzeichnis 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 MyTargetden 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_BUILDdurch POST_BUILDin add_custom_commandsicher, 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_directoryist 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_commandDokumentation beschrieben wird.makeist klug genug, nicht einmal auszuführen, make MyTargetwenn 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 cleanhinzuweisen, 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_executableoder hinzugefügt wurdeadd_library.