https://github.com/sunsided/cmake
A "Modern CMake" example project to collect best practices.
https://github.com/sunsided/cmake
cmake cpp cpp11
Last synced: 7 months ago
JSON representation
A "Modern CMake" example project to collect best practices.
- Host: GitHub
- URL: https://github.com/sunsided/cmake
- Owner: sunsided
- License: mit
- Created: 2018-03-27T18:40:16.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-03-27T18:51:24.000Z (about 8 years ago)
- Last Synced: 2025-02-28T12:32:57.780Z (about 1 year ago)
- Topics: cmake, cpp, cpp11
- Language: CMake
- Homepage:
- Size: 14.6 KB
- Stars: 42
- Watchers: 3
- Forks: 11
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# "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 `foo` that privately depends on
`Boost::date_time` and provides some functionality.
- A library `bar` that solely depends on `foo`.
- An executable `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.
## References
Blog posts and repositories that helped in assembling
this:
- [It's Time To Do CMake Right](https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/)
by Pablo Arias and the companion repo
- [modern-cmake-sample](https://github.com/pabloariasal/modern-cmake-sample), as well as
- [Easily supporting CMake install and find_package()](https://foonathan.net/blog/2016/03/03/cmake-install.html)
by Jonathan Müller.