Bedeutet CMAKE_BUILD_TYPE=Release -DNDEBUG?

Lesezeit: 2 Minuten

Benutzeravatar von patryk.beza
patryk.beza

Tut CMAKE_BUILD_TYPE=Release implizit implizieren -DNDEBUG?

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

Ich möchte wissen, ob ich folge CMake Code ist in meinem überflüssig CMakeLists.txt:

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

  • Ich habe es überprüft und es stellt sich heraus CMake anhängen -DNDEBUG Flagge, aber es ist immer noch problematisch, weil CMake-Dokumentation tut nicht ausdrücklich erwähnen, wenn -DNDEBUG Flag wird hinzugefügt, wenn CMAKE_BUILD_TYPE=Debug Option vorhanden ist. Ich vermeide es lieber, Code zu schreiben, der auf undokumentiertem Verhalten basiert, da er sich in zukünftigen CMake-Versionen ändern kann (obwohl die möglichen Konsequenzen gering wären).

    – patryk.beza

    16. Dezember 2015 um 1:16 Uhr


  • @iharob: Autor möchte wissen, ob dieses Verhalten Standard/üblich ist und beobachtet wird alle Maschinen. Deshalb überprüfe das bei ihm aktuelle Maschine ist nicht ausreichend (und Autor Tat dies). Google zeigt zumindest auf der ersten Seite keine Antwort. Und die Antwort ist tatsächlich nicht so einfach, wie es scheint. Die in der Frage angegebene Absicht, redundanten Code zu entfernen, ist für die Programmierung vollkommen in Ordnung. Für die Wiedereröffnung gestimmt.

    – Zywarew

    16. Dezember 2015 um 7:48 Uhr

  • @Tsyvarev Ich verstehe, es tut mir sehr leid. Das Dienstprogramm mit undokumentiert Dokumentation ist qmake und ich habe mich nicht daran erinnert, werde ich den Kommentar löschen, da er irreführend ist.

    – Iharob Al Asimi

    16. Dezember 2015 um 14:22 Uhr


Ja, es wird von CMake gesetzt. Das Durchsuchen des CMake-Codes zeigt, dass es für eine Vielzahl von Compilern festgelegt ist. Wahrscheinlich setzen sie es nur für diese Compiler, die dieses Flag akzeptieren. Hier eine der Zeilen zu GCC:

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

Beachten Sie jedoch, dass viele Projekte Release/Debug-Flags überschreiben, ohne die ursprüngliche Einstellung beizubehalten, und auch die Definitionen des Benutzers überschreiben.

1386730cookie-checkBedeutet CMAKE_BUILD_TYPE=Release -DNDEBUG?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy