Cómo compilar sin optimizaciones -O0 usando CMake


17

Estoy usando Scientific Linux (SL). Estoy tratando de compilar un proyecto que utiliza un montón de archivos C ++ (.cpp).

En el directorio user/project/Build, entro makepara compilar y vincular todos los archivos .cpp. Entonces tengo que ir user/run/y luego escribir./run.sh values.txt

Para depurar con GDB, tengo que ir user/runy luego escribir gdb ../project/Build/bin/Projecty para ejecutar, entro run -Project INPUT/inputfile.txt. Sin embargo, estoy tratando de imprimir el valor de la variable usando p variablename.

Sin embargo, recibo el mensaje s1 = <value optimized out>. He investigado en línea, y parece que necesito compilar sin optimizaciones -O0para resolver esto. ¿Pero dónde ingreso eso? En el CMakeLists? Si es así, ¿qué CMakeLists? ¿El de project/Buildo project/src/project?


¿Has intentado simplemente ejecutar cmake nuevamente con el tipo de compilación establecido en DEBUG? p. ej. (del directorio Build)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
steeldriver

1
¿Por qué no se publicó esto en Stack Overflow?
Peter Mortensen

Respuestas:


10

La respuesta de Chip fue útil, sin embargo, dado que la SETlínea sobrescribió CMAKE_CXX_FLAGS_DEBUGesto eliminó el -gvalor predeterminado que causó que mi ejecutable se construyera sin información de depuración. Necesitaba hacer una pequeña modificación adicional a CMakeLists.txt en el directorio de origen del proyecto para obtener un ejecutable creado con información de depuración y -O0 optimizaciones (en la versión 2.8.12.2 de cmake).

Agregué lo siguiente a CMakeLists.txt para agregar -O0y dejar -ghabilitado:

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

Esto agrega la -O0optimización a los indicadores ya utilizados para la depuración por CMake y solo se incluye para las compilaciones de GCC si está utilizando un proyecto multiplataforma.



4

Agregue esto a CMakeLists.txt (el que está en el directorio de origen del proyecto; no toque nada en el directorio de compilación):

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

y entonces

$ cmake -DCMAKE_BUILD_TYPE=Debug

trabajará. Alternativamente, solo agregue esto a CMakeLists.txt:

SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.