A "Modern CMake" example project to collect best practices.
MIT License
CMake is anarchy. In order to do it better, here's an example project that contains the following structure:
foo
that privately depends onBoost::date_time
and provides some functionality.bar
that solely depends on foo
.baz
that calls a method in bar
.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.
Blog posts and repositories that helped in assembling this: