Solo quiero depurar un código que se ejecuta en Linux y necesito una compilación de depuración ( -O0 -ggdb
). Así que agregué estas cosas a mi 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")
Cuando traté de compilar, me volví detallado sobre el uso make VERBOSE=1
y observé la salida, así
... /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 ...
Aparentemente, el código está compilado "-g -O2"
y esto no es lo que quiero. ¿Cómo puedo obligarlo a usar "-O0 -ggdb"
solo?
Respuestas:
Debe establecer las banderas después del
project
comando en su CMakeLists.txt.Además, si está llamando a
include(${QT_USE_FILE})
oadd_definitions(${QT_DEFINITIONS})
, debe incluir estosset
comandos después de los de Qt, ya que estos agregarían más banderas. Si ese es el caso, tal vez solo desee agregar sus banderas a las de Qt, así que cambie a, por ejemplo,fuente
QT_NO_EXCEPTIONS
en sus banderas, así que extendí un poco mi respuesta. Supongo que${QT_DEFINITIONS}
se agrega el-g -O2
.set
comandos después de los de Qt resuelve el problema. Muchas gracias.La solución más fácil que funciona bien para mí es esta:
CMake los agregará a los indicadores de todas las configuraciones. Solo asegúrese de borrar la caché de CMake.
fuente
CMAKE_CXX_FLAGS_DEBUG
etc.), incluirloCXXFLAGS
(y por lo tanto inyectarloCMAKE_CXX_FLAGS
) no es suficiente para pasar la opción al compilador. La configuración por tipo de compilación tiene prioridad sobre la entrada del usuario.Debe cambiar las BANDERAS predeterminadas de cmake C / CXX.
Según
CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE}
poner en el principalCMakeLists.txt
de:Para C
Para C ++
Esto anulará los valores definidos en CMakeCache.txt
fuente
En sistemas Unix, para varios proyectos, agregué estas líneas en CMakeLists.txt y se estaba compilando exitosamente porque la base ( / usr / include ) y las inclusiones locales ( / usr / local / include ) van en directorios separados:
Añade el directorio correcto, incluidas las rutas para los indicadores del compilador C y C ++ y la ruta del directorio correcto para los indicadores del vinculador.
Nota: el compilador C ++ (c ++) no es compatible con -L, por lo que tenemos que usar CMAKE_EXE_LINKER_FLAGS
fuente
include_directories
lugar de la-I
bandera?CMAKE_CXX_FLAGS
, lo que hizo que se ignoraran. Ahora que los coloquéCMAKE_EXE_LINKER_FLAGS
según su respuesta, están funcionando bien.