62 votes

Est-ce que set_target_properties dans CMake remplace CMAKE_CXX_FLAGS ?

Au début de mon projet CMake, je définis des indicateurs de compilation généraux dans la variable CMAKE_CXX_FLAGS, comme

 set(CMAKE_CXX_FLAGS "-W -Wall ${CMAKE_CXX_FLAGS}")

Plus tard, je dois ajouter des indicateurs de compilation supplémentaires spécifiques à la configuration (stockés dans BUILD_FLAGS). Puis-je utiliser la commande suivante pour cela :

 set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS ${BUILD_FLAGS})

ou dois-je ajouter le CMAKE_CXX_FLAGS manuellement :

 set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} ${BUILD_FLAGS}")

pour empêcher CMAKE_CXX_FLAGS d'être remplacé par BUILD_FLAGS ?

59voto

richq Points 29694

Utilisez le premier :

 set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS ${BUILD_FLAGS})

Les drapeaux stockés dans BUILD_FLAGS sont ajoutés après CMAKE_CXX_FLAGS lors de la compilation des sources de TARGET. La documentation fait allusion à cela, mais je viens de l'essayer pour m'en assurer.

COMPILE_FLAGS

    Additional flags to use when compiling this target's sources. 
   
   The COMPILE_FLAGS property sets additional compiler flags used to
   build sources within the target.  Use COMPILE_DEFINITIONS to
   pass additional preprocessor definitions.

La ligne de commande complète sera l'équivalent de :

 ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${COMPILE_FLAGS} -o foo.o -c foo.cc

Et comme l'a dit Ramon, vous pouvez toujours vérifier avec make VERBOSE=1 .

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