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 il n'est ni défini lors de la compilation, ni le nom MY_MACRO
dans les fichiers générés par CMake, à l'exception de CMakeCache.txt
où il est présent dans le formulaire:
MY_MACRO:UNINITIALIZED=1
Comment puis-je le faire?
La motivation derrière la question était de construire par lot des bibliothèques tierces, c'est pourquoi je voulais éviter de modifier CMakeLists. Alors des années plus tard, même si je n'en ai plus besoin, j'ai compris que c'était facilement réalisable par signifie externe à CMake:
Appelez CMake comme d'habitude, pas de drapeaux spéciaux.
Ensuite:
Avec MSVC: Le compilateur lit la variable d'environnement CL
pour obtenir des arguments de ligne de commande supplémentaires. Alors
set CL=/DMY_MACRO=1 %CL%
puis appelez MSBuild pour faire son travail.
Avec d'autres chaînes d'outils: Cela pourrait être faisable en définissant les variables d'environnement CFLAGS
ou CXXFLAGS
avant d'appeler make
, mais je n'ai pas vérifié cela.
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 en utilisant le -D
drapeau. Exemple:
cmake -DDEFINE_MACRO=OFF ..
Pour vous assurer que le compilateur reçoit correctement la définition, vous pouvez appeler make en mode verbeux et vérifier si la macro est définie ou non:
make VERBOSE=1
C'est également une bonne solution car make
recompilera votre code lorsque l'une des options de cmake change.
Essaye ça: -D CMAKE_CXX_FLAGS=/DMY_MACRO=1