Come compilare senza ottimizzazioni -O0 usando CMake


17

Sto usando Scientific Linux (SL). Sto cercando di compilare un progetto che utilizza un mucchio di file C ++ (.cpp).

Nella directory user/project/Build, entro makeper compilare e collegare tutti i file .cpp. Devo quindi andare a user/run/e quindi digitare./run.sh values.txt

Per eseguire il debug con GDB, devo andare user/rune quindi digitare gdb ../project/Build/bin/Projected eseguire, entro run -Project INPUT/inputfile.txt. Tuttavia, sto cercando di stampare il valore della variabile utilizzando p variablename.

Tuttavia, ricevo il messaggio s1 = <value optimized out>. Ho svolto alcune ricerche online e sembra che debba essere compilato senza ottimizzazioni -O0per risolverlo. Ma dove lo inserisco? Nel CMakeLists? In tal caso, quali elenchi CMake? Quello in project/Buildo project/src/project?


Hai provato semplicemente a eseguire di nuovo cmake con il tipo di build impostato su DEBUG? ad es. (dalla directory Build)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
steeldriver,

1
Perché questo non è stato pubblicato su StackTranslate.it?
Peter Mortensen

Risposte:


10

La risposta di Chip è stata utile, tuttavia poiché la SETriga ha sovrascritto CMAKE_CXX_FLAGS_DEBUGciò ha rimosso il -gvalore predefinito che ha causato la compilazione del mio eseguibile senza informazioni di debug. Avevo bisogno di apportare una piccola modifica aggiuntiva a CMakeLists.txt nella directory dei sorgenti del progetto per ottenere un eseguibile creato con informazioni di debug e -O0 ottimizzazioni (su cmake versione 2.8.12.2).

Ho aggiunto quanto segue a CMakeLists.txt per aggiungere -O0e lasciare -gabilitato:

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

Ciò aggiunge l' -O0ottimizzazione ai flag già utilizzati per il debug da CMake ed è incluso solo per build GCC se si utilizza un progetto multipiattaforma.



4

Aggiungi questo a CMakeLists.txt (quello nella directory sorgente del progetto; non toccare nulla nella directory build):

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

e poi

$ cmake -DCMAKE_BUILD_TYPE=Debug

funzionerà. In alternativa, aggiungi questo a CMakeLists.txt:

SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.