cmake
cmake copied to clipboard
A "Modern CMake" example project to collect best practices.
"Modern" CMake Example Project
CMake is anarchy. In order to do it better, here's an example project that contains the following structure:
- A library
foothat privately depends onBoost::date_timeand provides some functionality. - A library
barthat solely depends onfoo. - An executable
bazthat calls a method inbar.
All projects are set up in a way that they can be installed
and found using find_package(), as well as added
using add_subdirectory(). The CMakeLists.txt files
are heavily documented, but care should be taken to
also have a look at the cmake/*-cmake.in files of
the individual libraries.
Each installation is versioned, allowing for keeping multiple different versions at the same time. Likewise, installation paths are prefixed with the build configuration.
References
Blog posts and repositories that helped in assembling this:
- It's Time To Do CMake Right by Pablo Arias and the companion repo
- modern-cmake-sample, as well as
- Easily supporting CMake install and find_package() by Jonathan Müller.