Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cmake build types (RELEASE, DEBUG, etc.) compiler flags

Tags:

cmake

I would like some clarity regarding cmake build types.

Specifically, it isn't clear to me whether setting a build type will also modify the build flags, or whether this is just a "label" that is used internally for the build configuration. For example, in the case of a release build:

set(CMAKE_BUILD_TYPE Release)

will the O3 flag automatically be specified to the compiler? or do I need to explicitly specify it?

One answer I found sets both the build type and explicitly sets the compiler flags:

Optimize in CMake by default

But another thread I found online suggests that there are defaults:

https://cmake.org/pipermail/cmake/2016-May/063379.html

If the build type does specify some compiler flags, where can I find documentation for that? I would like to know what flags each build type is setting.

EDIT:

For future reference, if you want to look for the specific flags for your compiler (e.g. gnu in the case of gcc or g++), then you can clone the repo that Kamil references, go into the modules/compilers folder and try a command like:

grep -r _INIT . | grep -i gnu

In fact, as Kamil points out, these flags will also be the same as the ones used by Clang since the Clang cmake file includes the GNU one.

like image 706
bremen_matt Avatar asked Sep 18 '25 08:09

bremen_matt


1 Answers

The flag depends on the compiler. The -O3 flag is something understood by gcc, but may be not understood by other compilers. You can inspect the files inside Modules/Compilers/* of your cmake installation to see what flags are added depending on configuration.

For example in GNU.cmake we can read:

  string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Os -DNDEBUG")
  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")

I don't thing you will find "documentation" for that.

like image 115
KamilCuk Avatar answered Sep 21 '25 13:09

KamilCuk