58 votes

#ifdef DEBUG avec CMake indépendant de la plateforme

J'utilise CMake pour construire mes projets sur Windows (Visual Studio) ainsi que sur des machines Linux (gcc). J'aimerais marquer du code comme "débogage uniquement", comme avec

 #ifdef DEBUG
//some logging here
#endif

La question est : quelle définition de compilateur est disponible sur toutes les plateformes dans le type de build CMake « Debug » ? DEBUG semble ne pas exister. (Je veux avoir la journalisation ou autre uniquement lorsque le type de build est Debug.)

149voto

arrowdodger Points 7611

CMake ajoute -DNDEBUG au CMAKE_C_FLAGS_{RELEASE, MINSIZEREL} par défaut. Ainsi, vous pouvez utiliser #ifndef NDEBUG .

38voto

Lindydancer Points 13353

Je vous suggère d'ajouter votre propre définition. Le CMake Symbole CMAKE_C_FLAGS_DEBUG peut contenir des drapeaux utilisés uniquement en mode débogage. Par exemple:

C :

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

C++ :

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

Dans votre code, vous pouvez alors écrire ce qui suit :

 #ifdef MY_DEBUG
// ...
#endif

(Peut-être que vous devrez utiliser "/DMY_DEBUG" pour Visual Studio.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X