Comment définir une macro de préprocesseur C ++ via la ligne de commande avec CMake?

J’essaie de définir une macro de préprocesseur dans la ligne de commande de CMake. J’ai essayé:

set generator="Visual Studio 8 2005" set params=-D MY_MACRO=1 cmake.exe -G %generator% %params% ..\some_project 

mais ce n’est ni défini lors de la compilation, ni trouvé le nom MY_MACRO dans les fichiers générés par CMake, à l’exception de CMakeCache.txt où il est présent sous la forme:

 MY_MACRO:UNINITIALIZED=1 

Comment puis-je le faire?

Une bonne alternative serait de définir une option cmake:

 OPTION(DEFINE_MACRO "Option description" ON) # Enabled by default 

Suivi d’une condition:

 IF(DEFINE_MACRO) ADD_DEFINITIONS(-DMACRO) ENDIF(DEFINE_MACRO) 

Ensuite, vous pouvez activer / désactiver cette option via la ligne de commande avec cmake à l’aide de l’option -D . Exemple:

 cmake -DDEFINE_MACRO=OFF .. 

Pour vous assurer que le compilateur reçoit bien la définition, vous pouvez appeler make en mode commenté et vérifier si la macro est définie ou non:

 make VERBOSE=1 

C’est aussi une bonne solution car make recomstackra votre code lorsque l’une des options de cmake change.

Essayez ceci: -D CMAKE_CXX_FLAGS=/DMY_MACRO=1

À moins que vous n’ayez une bonne raison de ne pas le faire , vous devez utiliser ADD_DEFINITIONS(=[, ...]) .

Ajoutez simplement la ligne suivante à votre fichier CMakeLists.txt:

 ADD_DEFINITIONS("MY_MACRO=1") 

CMake se chargera de la syntaxe des commutateurs (que ce soit -D= ou /D= ).