2011-12-21 19 views
16

Estoy usando CMake para construir mis proyectos en Windows (Visual Studio) y en máquinas Linux (gcc). Me gustaría marcar un código como "depuración únicamente", al igual que con#ifdef DEPURACIÓN con CMake independiente de la plataforma

#ifdef DEBUG 
//some logging here 
#endif 

La pregunta es: ¿qué definición compilador está disponible en todas las plataformas en la "depuración" CMake construir el tipo? DEBUG parece no existir. (Quiero tener el registro o lo que sea solo cuando el tipo de compilación es Depurar.)

+0

http://stackoverflow.com/a/7725055/560648 –

Respuesta

13

Le sugiero que agregue el suyo. El símbolo de cmake CMAKE_C_FLAGS_DEBUG puede contener indicadores que solo se usan en el modo de depuración. Por ejemplo:

set(CMAKE_C_FLAGS_DEBUG "-DMY_DEBUG") 

(Tal vez, usted tendría que usar "/DMY_DEBUG" para Visual Studio.)

+0

Tengo la tentación de recomendarle su nombre de usuario, pero en su lugar, he votado negativamente porque no soy partidario de rehacer el trabajo que ya hizo para usted. por sus herramientas, y según la otra respuesta, 'NDEBUG' está definido por CMake, por lo que es preferible. –

+2

'NDEBUG' es un símbolo definido por el estándar C para controlar si' assert() ': s debe estar activo o no. Personalmente, no creo que debas usarlo para nada más. (Gracias por el cumplido con respecto al nombre de usuario.) – Lindydancer

+0

Estoy en contra de usar 'NDEBUG', también. FWIW, la forma correcta de agregar definiciones de macro (ahora, al menos) es 'add_definitions (-DMY_DEBUG)'. La [documentación] (http://www.cmake.org/cmake/help/v3.0/command/add_definitions.html) sugiere que reconoce '-' o'/'como prefijos, por lo que debe ser un agnóstico del sistema operativo. –

61

CMake añade -DNDEBUG a la CMAKE_C_FLAGS_ {LIBERACIÓN, MINSIZEREL} por defecto. Por lo tanto, puede usar #ifndef NDEBUG.

+7

El doble negativo es desagradable :) – entheh

Cuestiones relacionadas