cmake cflags

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.