Je veux juste déboguer du code fonctionnant sous Linux et j'ai besoin d'un debug build ( -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")
Quand j'ai essayé de compiler, je suis devenu verbeux en utilisant make VERBOSE=1
Et j'ai observé la sortie, comme ceci
... /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 à l'utiliser "-O0 -ggdb"
uniquement?
Réponses:
Vous devez définir les indicateurs après la
project
commande dans votre CMakeLists.txt.De plus, si vous appelez
include(${QT_USE_FILE})
ouadd_definitions(${QT_DEFINITIONS})
, vous devez inclure cesset
commandes 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 en par exemplela source
QT_NO_EXCEPTIONS
dans vos drapeaux, alors j'ai prolongé un peu ma réponse. Je suppose que cela${QT_DEFINITIONS}
ajoute le fichier-g -O2
.set
commandes après celles de Qt résout le problème. Merci beaucoup.La solution la plus simple qui fonctionne bien pour moi est la suivante:
CMake les ajoutera aux drapeaux de toutes les configurations. Assurez-vous simplement de vider le cache CMake.
la source
CMAKE_CXX_FLAGS_DEBUG
etc.), alors l'inclure dansCXXFLAGS
(et ainsi l'injecter dansCMAKE_CXX_FLAGS
) ne suffit pas réellement pour passer l'option au compilateur. La configuration par type de construction est prioritaire sur l'entrée utilisateur.Vous devez changer les FLAGS par défaut de cmake C / CXX.
Selon
CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE}
mettre dans le principalCMakeLists.txt
de:Pour C
Pour C ++
Cela remplacera les valeurs définies dans CMakeCache.txt
la source
Sur les systèmes Unix, pour plusieurs projets, j'ai ajouté ces lignes dans le CMakeLists.txt et la compilation était réussie car base ( / usr / include ) et local includes ( / usr / local / include ) vont dans des répertoires séparés:
Il ajoute le répertoire correct, y compris les chemins des indicateurs de compilateur C et C ++ et le chemin de répertoire correct pour les 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
la source
include_directories
place du-I
drapeau?CMAKE_CXX_FLAGS
, ce qui les a ignorés. Maintenant que je les ai placés enCMAKE_EXE_LINKER_FLAGS
fonction de votre réponse, ils fonctionnent très bien.