Ich möchte nur Code debuggen, der unter Linux ausgeführt wird, und ich benötige einen Debug-Build ( -O0 -ggdb
). Also habe ich diese Dinge zu meinem hinzugefügt 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")
Als ich versuchte zu kompilieren, schaltete make VERBOSE=1
ich die Verwendung ausführlich ein und beobachtete die Ausgabe wie folgt
... /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 ...
Anscheinend ist der Code kompiliert "-g -O2"
und das ist nicht das, was ich will. Wie kann ich die Verwendung "-O0 -ggdb"
nur erzwingen ?
Antworten:
Sie müssen die Flags nach dem
project
Befehl in Ihrer CMakeLists.txt setzen.Wenn Sie aufrufen
include(${QT_USE_FILE})
oderadd_definitions(${QT_DEFINITIONS})
, sollten Sie dieseset
Befehle nach den Qt-Befehlen einfügen, da diese weitere Flags anhängen würden. Wenn das ist der Fall, vielleicht wollen Sie nur Ihre Fahnen auf die Qt diejenigen anzuhängen, so Änderung zBquelle
QT_NO_EXCEPTIONS
in deinen Flaggen bemerkt , also habe ich meine Antwort ein bisschen erweitert. Ich vermute, das${QT_DEFINITIONS}
hängt das an-g -O2
.set
Befehle nach den Qt-Befehlen löst das Problem. Vielen Dank.Die einfachste Lösung, die für mich gut funktioniert, ist folgende:
CMake hängt sie an die Flags aller Konfigurationen an. Stellen Sie einfach sicher, dass Sie den CMake-Cache leeren.
quelle
Sie müssen die Standard-FLAGS von cmake C / CXX ändern.
Nach
CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE}
in der Hauptsache setzenCMakeLists.txt
von:Für C.
Für C ++
Dadurch werden die in CMakeCache.txt definierten Werte überschrieben
quelle
Auf Unix-Systemen habe ich für mehrere Projekte diese Zeilen in die Datei CMakeLists.txt eingefügt, und sie wurde erfolgreich kompiliert, weil Basis- ( / usr / include ) und lokale Includes ( / usr / local / include ) in getrennte Verzeichnisse :
Es wird das richtige Verzeichnis angehängt, einschließlich der Pfade für die C- und C ++ - Compiler-Flags und des richtigen Verzeichnispfads für die Linker-Flags.
Hinweis: Der C ++ - Compiler (c ++) unterstützt -L nicht, daher müssen wir CMAKE_EXE_LINKER_FLAGS verwenden
quelle
include_directories
anstelle der-I
Flagge zu verwenden?CMAKE_CXX_FLAGS
, wodurch sie ignoriert wurden. Jetzt, wo ich sieCMAKE_EXE_LINKER_FLAGS
basierend auf Ihrer Antwort eingefügt habe, funktionieren sie einwandfrei.