From the docs page:
CMAKE_BUILD_TYPE
Specifies the build type on single-configuration generators.
This statically specifies what build type (configuration) will be built in this build tree. Possible values are empty,
Debug
,Release
,RelWithDebInfo
andMinSizeRel
. This variable is only meaningful to single-configuration generators (such asMakefile Generators
andNinja
) i.e. those which choose a single configuration when CMake runs to generate a build tree as opposed to multi-configuration generators which offer selection of the build configuration within the generated build environment. There are many per-config properties and variables (usually following cleanSOME_VAR_<CONFIG>
order conventions), such asCMAKE_C_FLAGS_<CONFIG>
, specified as uppercase:CMAKE_C_FLAGS_[DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL]
. For example, in a build tree configured to build typeDebug
, CMake will see to havingCMAKE_C_FLAGS_DEBUG
settings get added to theCMAKE_C_FLAGS
settings. See alsoCMAKE_CONFIGURATION_TYPES
.
I'm aware the differences between Debug
builds and Release
builds, but what are the differences between Release
, RelWithDebInfo
and MinSizeRel
? I'm guessing RelWithDebInfo
meant creating debuggable binaries, and MinSizeRel
meant creating smallest possible size binaries.
From the LLVM CMake page:
CMAKE_BUILD_TYPE:STRING
If you are using an IDE such as Visual Studio, you should use the IDE settings to set the build type. Be aware that Release and RelWithDebInfo use different optimization levels on most platforms.
If I want to generate a production build, should I choose Release
?