Je veux juste déboguer du code tournant sous Linux et j’ai besoin d’une version de débogage (-O0 -ggdb
). Alors j'ai 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")
Quand j’ai essayé de compiler, j’ai tourné le sujet 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 "-O0 -ggdb"
seulement?
Vous devez définir les indicateurs after la commande project
dans votre CMakeLists.txt.
De même, si vous appelez include(${QT_USE_FILE})
ou add_definitions(${QT_DEFINITIONS})
, vous devez inclure ces commandes set
après les commandes Qt, car elles ajouteraient d'autres indicateurs. Si cela est le cas, vous voulez peut-être simplement ajouter vos drapeaux à ceux de Qt, changez pour par exemple.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb")
Vous devez changer les FLAGS par défaut de cmake C/CXX.
Selon CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE}
, Insérez dans le CMakeLists.txt
L'un des éléments suivants:
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
La solution la plus simple pour moi est la suivante:
export CFLAGS=-ggdb
export CXXFLAGS=-ggdb
CMake les ajoutera à tous les drapeaux de configuration.
Sur les systèmes Unix, pour plusieurs projets, j’ai ajouté ces lignes dans le fichier CMakeLists.txt et la compilation s’est bien déroulée car base (/usr/include) et local includes (/usr/local/include) allez dans des répertoires séparés:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/local/include -L/usr/local/lib")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/include")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib")
Il ajoute le répertoire correct, y compris les chemins des indicateurs du compilateur C et C++, ainsi que le chemin du répertoire correct des indicateurs de l'éditeur de liens.
Remarque: le compilateur C++ (c ++) ne prend pas en charge -L, nous devons donc utiliser CMAKE_EXE_LINKER_FLAGS