2016-08-05 1 views
0

Je sais que vous pouvez utiliser le de CMake pour rendre les variables CMake disponibles pour votre programme. Par exemple, je peux utiliserCMake: Définir un nom différent pour la variable #cmakedefine

#define ${CMAKE_BUILD_TYPE} 

entraînant

#define Release 

Cependant, pour garder mon code plus readible, je préfère définir

#define BUILD_TYPE_RELEASE 

est-il un moyen simple à réaliser ce?

Répondre

1

Voici une façon assez simple à résoudre:

En CMakesLists.txt:

if (NOT CMAKE_BUILD_TYPE) 
    set (CMAKE_BUILD_TYPE Release) 
endif (NOT CMAKE_BUILD_TYPE) 

string (TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE_NAME) 

configure_file (config.h.in config.h) 

Et config.h.in:

#define BUILD_TYPE_${BUILD_TYPE_NAME} 

Je suis, cependant, toujours curieux de savoir s'il y a un solution plus élégante.

+0

Comment est-ce plus lisible? Il suffit de s'habituer à la syntaxe '$ {}' ou d'utiliser une langue différente! – usr1234567

+0

@ usr1234567: 'Comment est-ce plus lisible? - Plus lisible que ** quoi? Asker ne fournit aucun moyen pour cela (transformer la valeur de la variable en majuscule). Son "plus lisible" se rapporte au code C (ou C++) qui utilise l'en-tête configuré, pas au script * CMakeLists.txt *. – Tsyvarev

1

Il s'agit plus d'une question de votre style de programmation préféré (fichiers de configuration et définitions de compilateur).

Dans votre cas, j'utiliser add_definitions() ou directement modifier/ajouter COMPILE_DEFINITIONS propriété répertoire (en utilisant generator expressions prend également en charge les environnements multi-configuration):

set_property(
    DIRECTORY 
    APPEND 
    PROPERTY 
     COMPILE_DEFINITIONS "BUILD_TYPE_$<UPPER_CASE:$<CONFIG>>" 
) 

débogage plus simplifiée/Release Check

Vous peut également vérifier quelles sont les définitions de compilateur que CMake prédéfinit. Sans avoir à modifier/ajouter quelque chose à vos CMakeLists.txt fichiers que vous pouvez simplement vérifier la définition NDEBUG (sortie construit sur toutes les plateformes) en vous C/C++ Code:

#ifdef NDEBUG 
... 
#endif 

Références