Frage

Ich versuche das Einrichten eines Post-Build-Befehl für CMake, das ich die ADD_CUSTOM_COMMAND Richtlinie getan haben, wie in der CMake Dokumentation angegeben. Was ich möchte, obwohl tun, müssen nur die Post-Build-Run, wenn ich einen Release-Build meiner ausführbaren erschaffe.

Wie kann man das erreichen?

War es hilfreich?

Lösung

Für Makefile-basierte Generatoren können Sie die CMAKE_BUILD_TYPE Variablen überprüfen und wirken auf ihren Wert:

if(CMAKE_BUILD_TYPE STREQUAL Debug)
    message(STATUS "Do debug stuff")
elseif(CMAKE_BUILD_TYPE STREQUAL Release)
    message(STATUS "Do release stuff")
elseif(CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo)
    message(STATUS "Do release with debug info stuff")
elseif(CMAKE_BUILD_TYPE STREQUAL MinSizeRel)
    message(STATUS "Do minimal size release stuff")
endif()

Für Visual Studio basiert baut, diese Frage SO scheint, dass CMAKE_BUILD_TYPE auch mit VS 2005 + arbeitet vorzuschlagen.

Andere Tipps

Ich lief in etwas ähnlichem, will eine DLL-Datei in ein Zielverzeichnis kopieren, sondern nur für Release-Builds. Nach vielen zerrissenen Haare habe ich es geschafft, es zu bekommen mit ein paar Generator Ausdrücke zu arbeiten (die $<...> thingies). Ich stelle es hier sieben Jahre später nicht so sehr um Ihr Problem zu lösen (obwohl ich Ihr Niveau der pertinence bewundern würde), sondern um den Schädel Haar der nächsten Person zu speichern, das gleiche Problem hat und diese Frage auf Google zu finden:

set(no_copy $<NOT:$<CONFIG:Release>>) # An abbreviation to make the example easier to read.
add_custom_command(TARGET myDLL POST_BUILD
    COMMAND "${CMAKE_COMMAND}" -E
    # do nothing for non-Release build
    $<${no_copy}:echo>
    # output text to make clear that the copy command is not actually issued
    $<${no_copy}:"copy omitted for non-release build, command would have been ">
    # the actual copy command, which is overridden by the "echo" above
    # in the case of a non-release build
    copy_if_different $<TARGET_FILE:myDLL> ${DIR_FOR_DLL})

Der Trick ist eine echo vor dem Befehl zu schreiben, die sonst ausgegeben würden. Auf diese Weise wird der Befehl nicht ausgeführt, obwohl ein wenig Lärm ausgegeben wird. Man könnte den Rest der Befehlszeile in einer Reihe von Generator Ausdrücke umschließen die Ausgabe auf Kosten einer völlig unleserlich Cmake Datei zu verkürzen. Auf der anderen Seite scheint es keine Möglichkeit, um die Kopie portably zu unterdrücken, ohne eine Ausgabe zu erzeugen. wenn Sie denken, schließlich gibt es eine einfache und man kann nur if($<CONFIG:Release>) ... endif() schreiben, rate ich Ihnen, sich die Enttäuschung zu ersparen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top