MenüHomeBlogMagic

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.

Permalink: https://adirmeier.de/Blog/ID_297
Tags: Blog, Cmakevon am 2020-01-08