CMake Tricks

Release Mode

C++ gets much (much) faster in Release mode compared to Debug mode. This is usually set by a cli arg when building:

cmake -DCMAKE_BUILD_TYPE=Release ..
make

but instead, in the CMakeLists.txt we can specify that we want to build in Release mode by default:

if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE "Release")
  # set(CMAKE_BUILD_TYPE "Debug")
endif()

I’ve seen 10x speed improvement in my code by doing this.

Speed up compilation using Precompiled Headers

In cmake 3.16 there is a new command: target_precompile_headers. This will speed up compilation, since c++ will not rebuild header files that have been compiled.

Place some of your includes into a dedicated precompile.hpp and then #include "precompile.hpp". Next, in your CMakeLists.txt add the following:

target_precompile_headers(<target> PRIVATE 
    include/precompile.hpp
)

which will tell cmake to precompile this header file. Dont forget to set the cmake_version to be atleast 3.16.

Reference: https://www.youtube.com/watch?v=eSI4wctZUto

Good References

Most articles on cmake are pretty bad or assume much prior knowledge. Here are a few that I found quite useful:

  • https://bastian.rieck.me/blog/posts/2018/cmake_tips/