2011-12-21 3 views
16

Я использую CMake для создания моих проектов в Windows (Visual Studio), а также на машинах Linux (gcc). Я хотел бы отметить некоторый код, как «отладка только», как с#ifdef DEBUG с CMake независимо от платформы

#ifdef DEBUG 
//some logging here 
#endif 

Вопрос: какой компилятор определение доступен на всех платформах в CMake «Debug» построить тип? DEBUG, похоже, не существует. (Я хочу иметь журнал или что-то еще, только когда тип сборки - Debug.)

+0

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

ответ

13

Я бы предположил, что вы добавляете свои собственные. Символ cmake CMAKE_C_FLAGS_DEBUG может содержать флаги, используемые только в режиме отладки. Например:

set(CMAKE_C_FLAGS_DEBUG "-DMY_DEBUG") 

(Возможно, вам придется использовать "/DMY_DEBUG" для Visual Studio.)

+0

У меня возникает желание перестраховать вас за свое имя пользователя, но вместо этого я проигнорирован, потому что я не поклонник повторной работы, которая уже сделана для вас по вашим инструментам, и, согласно другому ответу, «NDEBUG» определяется CMake, поэтому предпочтительнее. –

+2

'NDEBUG' - это символ, определенный стандартом C, для контроля того, активен ли' assert() ': s. Лично я не думаю, что вы должны использовать его для чего-либо еще. (Спасибо за комплимент относительно имени пользователя.) – Lindydancer

+0

Я тоже против использования 'NDEBUG'. FWIW, правильный способ добавления определений макросов (теперь, по крайней мере) - это 'add_definitions (-DMY_DEBUG)'. В [документации] (http://www.cmake.org/cmake/help/v3.0/command/add_definitions.html) предполагается, что он распознает '-' или'/'как префиксы, поэтому он должен быть агностическим. –

61

CMake добавляет -DNDEBUG к CMAKE_C_FLAGS_ {RELEASE, MINSIZEREL} по умолчанию. Итак, вы можете использовать #ifndef NDEBUG.

+7

Двойной негатив неприятный :) – entheh

Смежные вопросы