We generally recommend using Ninja with CMake, especially for large projects. Ninja speeds up rebuild times significantly and avoids erratic problems with slower GNU Make. CMake also has the Ninja Multi-Config generator
cmake -G "Ninja Multi-Config"
that allows building multiple build configuration types e.g. Debug, Release without CMake regenerating build*.ninja files for each build type with totally distinct build root directories.
Ninja Multi-Config generator options may be used transparently with older CMake and different generators. The default CMake generator can be set with environment variable:
NOTE: CMAKE_CONFIGURATION_TYPES was broken in CMake 3.22.0, where it was introduced.
To make the default multi-config build “Release” while making Debug config also available, set environment variable CMAKE_CONFIGURATION_TYPES:
Because Release is listed first, the default build type is Release. With those settings, one can quickly build Debug and Release and test like:
cmake -B build # Release default per above settings cmake --build build ctest --test-dir build -C Release
Then quickly build and test Debug without regenerating CMake/Ninja build files by:
cmake --build build --config Debug ctest --test-dir build -C Debug