2015-12-16 23 views
5

Czy CMAKE_BUILD_TYPE=Release domyślnie implikuje -DNDEBUG?Czy CMAKE_BUILD_TYPE = Wydanie impli -DNDEBUG?

Jeśli nie: czy nie należy oczekiwać, że ta implikacja ma miejsce?

Chcę wiedzieć, czy następujący kod CMake jest zbędny w moim CMakeLists.txt:

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

Sprawdziłem to i okazało się, że * CMake * dopisuje flagę '-DNDEBUG', ale nadal jest problematyczne, ponieważ [Dokumentacja CMakeka] (https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE. html) robi ** not ** jawnie wspomina, jeśli flaga '-DNDEBUG' jest dodana, gdy jest dostępna opcja' CMAKE_BUILD_TYPE = Debug'. Wolę unikać pisania kodu w oparciu o nieudokumentowane zachowanie, ponieważ może się ono zmienić w przyszłych wersjach CMake (chociaż potencjalne konsekwencje byłyby niewielkie). –

+1

Masz na myśli! = W tytule? Zdecydowanie spodziewam się, że kompilacje debugowania będą ** NOT ** definiować 'NDEBUG'. – immibis

+0

@immibis - dzięki. Oczywiście to był literówka. Zmieniłem moje pytanie. +1 –

Odpowiedz

1

Tak, to jest przez CMake. Przeglądanie kodu CMake pokazuje, że dla wielu kompilatorów jest ustawiony. Prawdopodobnie ustawiają go tylko dla tych kompilatorów, które akceptują tę flagę. Oto jeden z wierszy dotyczących GCC:

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

Ale należy pamiętać, że wiele projektów nadpisać flagi release/debug bez zachowania ustawień początkowych, a także nadpisanie definicji użytkownika.