So kompilieren Sie ohne Optimierungen -O0 mit CMake


17

Ich benutze Scientific Linux (SL). Ich versuche, ein Projekt zu kompilieren, das eine Reihe von C ++ (.cpp) -Dateien verwendet.

In das Verzeichnis gebe user/project/Buildich ein make, um alle CPP-Dateien zu kompilieren und zu verknüpfen. Ich muss dann gehen user/run/und dann tippen./run.sh values.txt

Um mit GDB zu debuggen, muss ich gehen user/runund dann gdb ../project/Build/bin/Projecteingeben und ausführen, ich gebe ein run -Project INPUT/inputfile.txt. Ich versuche jedoch, den Wert der Variablen mit auszudrucken p variablename.

Ich bekomme jedoch die Nachricht s1 = <value optimized out>. Ich habe online recherchiert und es scheint, dass ich ohne Optimierungen kompilieren muss -O0, um dies zu beheben. Aber wo gebe ich das ein? In der CMakeLists? Wenn ja, welche CMakeLists? Der in project/Buildoder project/src/project?


Haben Sie versucht, cmake einfach noch einmal mit dem Build-Typ DEBUG auszuführen? zB (aus dem Build-Verzeichnis)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
steeldriver

1
Warum wurde dies nicht auf Stack Overflow gepostet?
Peter Mortensen

Antworten:


10

Die Antwort von Chip war hilfreich, da die SETZeile CMAKE_CXX_FLAGS_DEBUGdies überschrieb , wurde der -gStandardwert entfernt, der dazu führte , dass meine ausführbare Datei ohne Debug-Informationen erstellt wurde. Ich musste eine kleine zusätzliche Änderung an CMakeLists.txt im Projektquellverzeichnis vornehmen, um eine ausführbare Datei zu erhalten, die Debugging-Informationen und -O0 Optimierungen enthält (unter cmake Version 2.8.12.2).

Ich habe Folgendes zu CMakeLists.txt hinzugefügt, um es hinzuzufügen -O0und -gaktiviert zu lassen:

# Add -O0 to remove optimizations when using gcc
IF(CMAKE_COMPILER_IS_GNUCC)
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
ENDIF(CMAKE_COMPILER_IS_GNUCC)

Dies fügt die -O0Optimierung den Flags hinzu, die bereits für das Debugging von CMake verwendet wurden, und ist nur für GCC-Builds enthalten, wenn Sie zufällig ein plattformübergreifendes Projekt verwenden.



4

Fügen Sie dies zu CMakeLists.txt hinzu (das im Projektquellverzeichnis; berühren Sie nichts im Erstellungsverzeichnis):

SET(CMAKE_CXX_FLAGS_DEBUG "-O0")
SET(CMAKE_C_FLAGS_DEBUG "-O0")

und dann

$ cmake -DCMAKE_BUILD_TYPE=Debug

wird funktionieren. Alternativ können Sie dies auch zu CMakeLists.txt hinzufügen:

SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.