How to get aktuelle Konfiguration (Release/Debug) in CMake für Visual Studio
Bin ich auf Visual Studio 2013, CMake 3.5.1, Windows 10. Ich bin versucht zu kopieren einiger Dateien via CMake wie folgt:
file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release)
Ist es möglich, Sie zu ersetzen "Release" mit einer variable, die für die Konfiguration wie:
file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/${Variable})
Versuchte ich
file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE})
aber CMAKE_BUILD_TYPE ist ein leerer string, wenn ich Nachricht drucken Sie es aus, auch habe ich versucht
file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/$<CONFIGURATION>)
aber aus irgendeinem Grund Datei, Befehl kann nicht entziffern $<CONFIGURATION>
in der Erwägung, dass Befehl wie
add_custom_target(run COMMAND ${CMAKE_BINARY_DIR}/bin/$<CONFIGURATION>/Test.exe)
können. Was ist der richtige Weg, zu extrahieren, ob visual studio ist derzeit gebaut im Release oder Debug in CMake?
- Ich kann immer noch nicht verstehen: ich habe einen VS-Lösung durch den Aufruf
cmake -G "Visual Studio 15 2017 Win64" ..
und jetzt habe ich eine *.sln-Projekt mitCMAKE_CONFIGURATION_TYPES=Debug;Release;MinSizeRel;RelWithDebInfo
(es ist ziemlich standard, denke ich). Ich bin in der Lage, ändern Sie die Konfiguration mithilfe von configuration manager (oder dropdown). Wie kann ich wieder an aktuell ausgewählte Konfiguration inCMakeLists.txt
? - Sie weiß nicht, was ausgewählt ist, während CMake config-Zeit, d.h. vor der Generierung des sln-Datei.
add_custom_target
funktioniert, weil die custom target wird aufgerufen, nachdem die sln-Datei ist, die manuell oder programmgesteuert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
file
Befehl ausgeführt wird, während CMake-Laufzeit, nicht während der build-time (d.h. die VS runtime).Bedeutet dies auch, dass der generator Ausdrücke (z.B.
$<CONFIG>
) können nicht genutzt werden, wie diese ausgewertet werden die während der Bauzeit.(Hinweis: solange kein ausdrücklicher Hinweis auf die Verwendung der generator-Ausdrücke für einen bestimmten Befehl in den CMake-Doku, Sie werden nicht unterstützt von diesem Befehl).
Der Grund, warum
${CMAKE_BUILD_TYPE}
leer ist, ist aufgrund der Grund, dass Sie wahrscheinlich noch nicht angegeben, es auf den Aufruf von CMake:Jedoch mit, dass, würde bedeuten, dass die build-Dateien werden nur generiert, für die Debug Konfiguration. Das ist offensichtlich nicht das, was Sie wollen.
Um Ihr problem zu lösen: Mit generator-Ausdrücke ist der richtige Weg, da hast du schon herausgefunden, mit der Verwendung von
add_custom_target
(oderadd_custom_command
).Können Sie benutzerdefinierte Befehle als Abhängigkeiten für andere "real" Ziele, und Sie können angeben, post-/pre-build-und pre-link-Befehle für ein bestimmtes Ziel über
add_custom_command
.Als die Doku-Staaten für die
COMMAND
argumentadd_custom_command
:Kopieren einer Datei nach einem erfolgreichen build eine Ziel: