2015-12-16 6 views
5

Bedeutet CMAKE_BUILD_TYPE=Release implizit implizit -DNDEBUG?Ist CMAKE_BUILD_TYPE = Freigabe impliziert -DNDEBUG?

Wenn nicht: ist es nicht vernünftig zu erwarten, dass diese Implikation stattfindet?

Ich möchte wissen, ob folgende CMake Code in meinem CMakeLists.txt redundant ist:

if (NOT CMAKE_BUILD_TYPE MATCHES Debug) 
    add_definitions(-DNDEBUG) 
endif() 
+0

Ich überprüfte es und es stellt sich heraus, dass * CMake * das '-DNDEBUG'-Flag anhängt, aber es ist immer noch problematisch, weil [CMake-Dokumentation] (https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE. html) erwähnt ** nicht ** explizit, wenn das '-DNDEBUG' Flag hinzugefügt wird, wenn 'CMAKE_BUILD_TYPE = Debug' Option vorhanden ist. Ich bevorzuge es, Code zu schreiben, der auf undokumentiertem Verhalten basiert, weil er sich in zukünftigen CMake-Versionen ändern könnte (obwohl die möglichen Konsequenzen gering wären). –

+1

Sie meinen! = Im Titel? Ich würde definitiv Debug-Builds erwarten, um 'NDEBUG' zu definieren. – immibis

+0

@immibis - danke. Natürlich war es ein Tippfehler. Ich habe meine Frage bearbeitet. +1 –

Antwort

1

Ja, es wird von CMake. Durch das Überlesen des CMake-Codes wird deutlich, dass es für eine Vielzahl von Compilern eingerichtet ist. Wahrscheinlich haben sie es nur für diese Compiler gesetzt, die dieses Flag akzeptieren. Hier eine der Leitungen über GCC:

Modules/Compiler/GNU.cmake: set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") 

aber bewusst sein, dass viele Projekte release/Debug-Flags überschreiben, ohne die ursprüngliche Einstellung zu bewahren und auch Benutzer-Definitionen zu überschreiben.