2015-12-16 26 views
5

CMAKE_BUILD_TYPE=Release implica implicitamente -DNDEBUG?CMAKE_BUILD_TYPE = Rilascio implicito -DNDEBUG?

In caso contrario: non è ragionevole aspettarsi che questa implicazione abbia luogo?

voglio sapere se seguito CMake codice è ridondante nel mio CMakeLists.txt:

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

L'ho verificato e risulta che * CMake * aggiunge il flag '-DNDEBUG', ma è ancora problematico perché [documentazione di CMake] (https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE. html) fa ** not ** menziona esplicitamente se il flag '-DNDEBUG' viene aggiunto quando è presente l'opzione' CMAKE_BUILD_TYPE = Debug'. Preferisco evitare di scrivere codice basato su comportamenti non documentati perché potrebbe cambiare nelle future versioni di CMake (anche se le potenziali conseguenze sarebbero piccole). –

+1

Vuoi dire! = Nel titolo? Sicuramente mi aspetto che i build di debug ** NON ** definiscano 'NDEBUG'. – immibis

+0

@immibis - grazie. Certo che era un errore di battitura. Ho modificato la mia domanda. +1 –

risposta

1

Sì, è impostato per CMake. Svela il codice di CMake, che per una serie di compilatori è impostato. Probabilmente lo hanno impostato solo per questi compilatori, che accettano questa bandiera. Ecco una delle linee in materia di GCC:

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

Ma essere consapevoli del fatto che molti progetti sovrascrivono bandiere rilascio/di debug senza conservare l'impostazione iniziale e anche sovrascrivere definizioni dell'utente.