Set CFLAGS and CXXFLAGS options using CMake

cflags, cmake

Solution

You need to set the flags after the `project` command in your CMakeLists.txt.

Also, if you're calling `include(${QT_USE_FILE})` or `add_definitions(${QT_DEFINITIONS})`, you should include these `set` commands after the Qt ones since these would append further flags. If that is the case, you maybe just want to append your flags to the Qt ones, so change to e.g.

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

Problem

I just want to debug some code running on Linux and I need a debug build (-O0 -ggdb). So I added these things to my CMakeLists.txt file: ``` 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") ``` When I tried to compile I turned verbose on using `make VERBOSE=1` And I observed the output, like this ``` ... /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 ... ``` Apparently the code is compiled with "-g -O2" and this is not what I want. How can I force it to use `"-O0 -ggdb"` only?

Original source