#ifdef DEBUG с CMake независимо от платформы - PullRequest
27 голосов
/ 21 декабря 2011

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

#ifdef DEBUG
//some logging here
#endif

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

Ответы [ 3 ]

86 голосов
/ 21 декабря 2011

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

23 голосов
/ 21 декабря 2011

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

C:

set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DMY_DEBUG")

C++:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DMY_DEBUG")

В своем коде вы можете написать следующее:

#ifdef MY_DEBUG
// ...
#endif

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

8 голосов
/ 05 июля 2018

В CMake> = 2.8, используйте target_compile_definitions:

target_compile_definitions(MyTarget PUBLIC "$<$<CONFIG:DEBUG>:DEBUG>")

При компиляции в режиме отладки это определит символ DEBUG для использования в вашем коде. Он будет работать даже в таких средах разработки, как Visual Studio и Xcode, для которых cmake создает один файл для всех режимов компиляции.

Вы должны сделать это для каждой цели [1]. В качестве альтернативы вы можете использовать add_compile_options (Cmake> = 3.0):

add_compile_options("$<$<CONFIG:DEBUG>:-DDEBUG>")

Обратите внимание, что в последних версиях Visual C ++ (по крайней мере, начиная с VS2015) разрешены параметры для одного или нескольких параметров, поэтому он должен нормально работать на всех компиляторах. Эта команда также полезна для других параметров компиляции, которые вы можете добавить («/ O2» в режиме выпуска для MSVC или «-O3» для режима выпуска в G ++ / Clang)

[1]: Примечание: в CMake> = 3.12 (в настоящее время бета) также имеется add_compile_definitions, который поддерживает выражения генератора, который влияет на все цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...