Cmake add_custom_command Debug und Release unterscheiden
Des öfteren ist es in cmake notwendig, dass in einem custom command zwischen Debug und Release unterschieden wird.
Eine direkte Methode habe ich bisher noch nicht gefunden um dein Kommando nur im Release oder Debug auszuführen.
Allerdings kann man ein einzelnes COMMANDO abhängig von der Configuration manipulieren.
Z.B:
add_custom_command(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND echo Configuration is $<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>
)
Hier wird ein String in Abhängigkeit von der Configuration ausgegeben. Natürlich lässt sich das jetzt erweitern und z.B. bei Release eine andere Datei kopieren als z.b. in Debug:
add_custom_command(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
Source_$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>.txt
Target.txt
)
Wen eine zusätzliche ausgabe nicht stört, der kann ein ganzes COMMANDO mit echo verhindern
add_custom_command(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND $<$<CONFIG:Release>:echo>$<$<CONFIG:Debug>:TargetCommand> Paramter
)
Hier wird das TargetCommand nur im Debug ausgeführt, im Release wird stattdessen ein echo ausgeführt und die Parameter ausgegeben.
Ausführen eines Commandos nur in Release: (Nur durch Zufall, ohne Dokumentation dazu, gefunden)
add_custom_command(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND $<$<CONFIG:Release>:KOMMANDO> arguments....
)
Das KOMMANDO steht für das jeweilige kommando, welches in Release ausgeführt werden soll.
Die restliche Zeile wird ignoriert wenn das KOMMANDO nicht ausgeführt wird.
Wenn ich andere Beispiele habe, die ich als Workaround einsetze, dann poste ich die hier.