2012-04-10 6 views
52

Ich möchte nur etwas Code unter Linux debuggen und ich brauche ein Debug Build(). Also habe ich diese Dinge zu meinem CMakeLists.txt:cmake CFLAGS CXXFLAGS Änderung

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 ich mit make VERBOSE=1 ausführliche zu kompilieren drehte sich um und beobachtete ich die Ausgabe, wie dieser

... /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 mit "-g -O2" kompiliert und das ist nicht was ich will. Wie kann ich es zwingen, nur "-O0 -ggdb" zu verwenden?

+1

Wenn Sie einen debuggable Build erstellen möchten, führen Sie einfach eine Debug-Konfiguration in der Befehlszeile aus. "cmake -DCMAKE_BUILD_TYPE = Debug". Der resultierende Build enthält die Debug-Flags für das angegebene Build-System. Kein Grund, die cmake-Datei selbst zu modifizieren. Sie können den CMAKE_C_FLAGS-Wert auch mit einem anderen -D-Argument senden. – Atifm

Antwort

47

Sie müssen die Flags nach den project Befehl in Ihrer CMakeLists.txt setzen.

Auch, wenn Sie include(${QT_USE_FILE}) oder add_definitions(${QT_DEFINITIONS}) anrufen, sollten Sie diese set Befehle nach den Qt diejenigen umfassen, da diese weitere Fahnen anhängen würde. Wenn das der Fall ist, möchten Sie vielleicht nur Ihre Flags an die Qt, also ändern Sie z.

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

Ich habe diese Flags nach dem Projektbefehl gesetzt. Aber die Ausgabe ist die gleiche. – majie

+0

Ich habe gerade die 'QT_NO_EXCEPTIONS' in deinen Flags bemerkt, also habe ich meine Antwort ein wenig erweitert. Ich vermute, dass '$ {QT_DEFINITIONS}' den '-g -O2' anhängt. – Fraser

+1

Ja, das ist es. Das Setzen dieser 'set'-Befehle nach den Qt-Befehlen löst das Problem. Vielen Dank. – majie

9

Sie müssen die cmake C/CXX Standard-FLAGS ändern.

Nach CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE} put in der Haupt CMakeLists.txt eines von:

Für 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") 

Für 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") 

Dadurch werden die Werte in CMakeCache.txt definiert überschreiben

2

Auf Unix-Systemen für mehrere Projekte, fügte ich diese Zeilen in die CMakeLists.txt und es wurde Kompilieren erfolgreich, weil Basis (/usr/include) und lokale umfasst (/usr/local/include) gehen in getrennte Verzeichnisse:

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") 

Es hängt das richtige Verzeichnis, einschließlich Pfade für die C- und C++ Compiler-Flags und die richtige Verzeichnispfad für den Linker-Flags.

Hinweis: C++ Compiler (C++) nicht unterstützt -L, so haben wir für mich CMAKE_EXE_LINKER_FLAGS

3

Die einfachste Lösung funktioniert gut zu verwenden, ist dies:

export CFLAGS=-ggdb 
export CXXFLAGS=-ggdb 

CMake wird anhängen sie an alle Konfigurationsflags.

Verwandte Themen