105 votes

Définir les options CFLAGS et CXXFLAGS à l'aide de CMake

Je veux juste déboguer du code exécuté sur Linux et j'ai besoin d'une version de débogage ( -O0 -ggdb ). J'ai donc ajouté ces choses à mon CMakeLists.txt :

 set(CMAKE_BUILD_TYPE DEBUG)
set(CMAKE_C_FLAGS "-O0 -ggdb")
set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_C_FLAGS_RELEASE "-O0 -ggdb")
set(CMAKE_CXX_FLAGS "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "-O0 -ggdb")

Lorsque j'ai essayé de compiler, j'ai activé le verbeux en utilisant make VERBOSE=1 Et j'ai observé la sortie, comme ça

 ... /usr/bin/c++ -D_BSD_SOURCE **-O0 -ggdb** -Wnon-virtual-dtor 
-Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W 
-Wpointer-arith -Wformat-security -fno-exceptions -DQT_NO_EXCEPTIONS 
-fno-check-new -fno-common -Woverloaded-virtual -fno-threadsafe-statics 
-fvisibility=hidden -fvisibility-inlines-hidden **-g -O2** 
-fno-reorder-blocks -fno-schedule-insns -fno-inline ...

Apparemment, le code est compilé avec "-g -O2" et ce n'est pas ce que je veux. Comment puis-je le forcer à utiliser uniquement "-O0 -ggdb"

100voto

Fraser Points 20579

Vous devez définir les indicateurs après la commande project dans votre CMakeLists.txt.

De plus, si vous appelez include(${QT_USE_FILE}) ou add_definitions(${QT_DEFINITIONS}) , vous devez inclure ces commandes set après celles de Qt car elles ajouteraient d'autres indicateurs. Si tel est le cas, vous voudrez peut-être simplement ajouter vos drapeaux à ceux de Qt, alors changez par exemple

 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb")

28voto

Virus_7 Points 426

La solution la plus simple qui fonctionne bien pour moi est la suivante :

 export CFLAGS=-ggdb
export CXXFLAGS=-ggdb

CMake les ajoutera aux drapeaux de toutes les configurations. Assurez-vous simplement de vider le cache CMake.

18voto

carl-erwin Points 171

Vous devez modifier les FLAGS par défaut de cmake C/CXX .

Selon CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE} mettre dans le CMakeLists.txt un des :

Pour C

 set(CMAKE_C_FLAGS_DEBUG "put your flags")
set(CMAKE_C_FLAGS_MINSIZEREL "put your flags")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "put your flags")
set(CMAKE_C_FLAGS_RELEASE "put your flags")

Pour C++

 set(CMAKE_CXX_FLAGS_DEBUG "put your flags")
set(CMAKE_CXX_FLAGS_MINSIZEREL "put your flags")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "put your flags")
set(CMAKE_CXX_FLAGS_RELEASE "put your flags")

Cela remplacera les valeurs définies dans CMakeCache.txt

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