cmake CFLAGS CXXFLAGS modificación
(4)
Debe cambiar las BANDERAS predeterminadas Cmake C / CXX.
De acuerdo con CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE}
ponga en el CMakeLists.txt
principal una de las siguientes:
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
Solo quiero depurar algunos códigos que se ejecutan en Linux y necesito una versió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, active verbose on 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 con "-g -O2"
y esto no es lo que quiero. ¿Cómo puedo forzarlo a usar "-O0 -ggdb"
solamente?
Debe establecer los indicadores después del comando del project
en su CMakeLists.txt.
Además, si llama 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 caso, tal vez solo desee agregar sus banderas a las de Qt, cambie a, por ejemplo,
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb")
En los sistemas Unix, para varios proyectos, agregué estas líneas en CMakeLists.txt y estaba compilando correctamente porque base ( / usr / include ) y local incluye ( / usr / local / include ) 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")
Anexa el directorio correcto, incluidas las rutas para los indicadores del compilador C y C ++ y la ruta correcta del directorio para los indicadores del enlazador.
Nota: el compilador C ++ (c ++) no admite -L, por lo que debemos usar CMAKE_EXE_LINKER_FLAGS
La solución más fácil que funciona bien para mí es esta:
export CFLAGS=-ggdb
export CXXFLAGS=-ggdb
CMake los agregará a todos los indicadores de configuraciones.