2012-04-10 6 views
52

Solo quiero depurar algún código que se ejecute en Linux y necesito una compilación de depuración (-O0 -ggdb). Por lo que añade estas cosas a mi CMakeLists.txt:cmake CFLAGS CXXFLAGS modificación

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 intenté compilar Me di detallado sobre el uso de make VERBOSE=1 Y he observado la salida, como este

... /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 ... 

Al parecer, el código se compila con "-g -O2" y esto no es lo que quiero ¿Cómo puedo forzarlo a usar "-O0 -ggdb" solamente?

+1

Si desea una versión depurada, simplemente realice una configuración de depuración en la línea de comandos. "cmake -DCMAKE_BUILD_TYPE = Depurar". La compilación resultante tendrá los indicadores de depuración activados para el sistema de compilación especificado. No hay razón para modificar el archivo cmake en sí. También puede enviar el valor CMAKE_C_FLAGS con otro argumento -D. – Atifm

Respuesta

47

Debe configurar los indicadores después de el comando project en su CMakeLists.txt.

Además, si llama a include(${QT_USE_FILE}) o add_definitions(${QT_DEFINITIONS}), debe incluir estos comandos set después de los Qt, ya que estos agregarían más indicadores. Si ese es el estuche, tal vez solo quiera agregar sus banderas a las de Qt, por lo tanto, cambie a p. Ej.

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

Puse esas banderas después del comando del proyecto. Pero el resultado es el mismo. – majie

+0

Acabo de notar el 'QT_NO_EXCEPTIONS' en sus banderas, por lo que he extendido mi respuesta un poco. Supongo que '$ {QT_DEFINITIONS}' se agrega al '-g -O2'. – Fraser

+1

Sí, esto es todo. Poner esos comandos 'set' después de los Qt resuelve el problema. Muchas gracias. – majie

9

Debe cambiar las BANDERAS por defecto Cmake C/CXX.

Según CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE} puesto en la principal CMakeLists.txt uno de:

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

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

Esto anulará los valores definidos en CMakeCache.txt

2

En los sistemas Unix, para varios proyectos, he añadido estas líneas en el CMakeLists.txt y compilaba con éxito debido a base de (/usr/include) y locales incluye (/usr/local/include) entrar en directorios separados:

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

Se anexa el directorio correcto, incluyendo caminos para la opciones del compilador C y C++ y la ruta del directorio correcto para las banderas de engarce.

Nota: compilador de C++ (C++) no soporta -L, por lo que tenemos que utilizar CMAKE_EXE_LINKER_FLAGS

3

La solución más fácil trabajar bien para mí, es la siguiente:

export CFLAGS=-ggdb 
export CXXFLAGS=-ggdb 

CMake anexará a todas las configuraciones de banderas.