Awesome CMake 

A curated list of awesome CMake
scripts, modules, examples and others
Your contributions are highly welcome (first see CONTRIBUTING.md).
There is another file NonModernCMake.md with other
links worth taking a look, but they use obsolete practices which are
considered non-modern - like not using target_*-based
dependency management - see #16
and #42
for more details.
Contents
Resources
- Latest
Documentation
- FAQ
- Wiki
- Webinars
- Web Book - CGold: The
Hitchhiker’s Guide to the
CMake.
[BSD2]
- Modern CMake -
Modern CMake PDF and samples by the creator of cmakepp.
[MIT]
- Tutorial
- Modern CMake tutorials part1: CMake basics
- Article
- Easily supporting CMake install and find_package().
- Article
- Easy dependency management for C++ with CMake and Git.
- Article
- Opt-in header-only libraries with CMake.
- Article
- Ultimate Guide to Modern CMake.
- Article
- A list of common CMake antipatterns (from 2013 but still
relevant).
- Article
- How to Build a CMake-Based Project.
- Article
- Learn CMake’s Scripting Language in 15 Minutes.
- Article - The
architecture of CMake.
- Lecture -
Effective CMake - by Daniel Pfeifer, C++Now 2017.
- Article
- Building Cross-Platform CUDA Applications with CMake.
- Tutorial
- A step-by-step guide for understanding CMake.
- Article
+ Lecture - Embracing Modern CMake - by Stephen Kelly.
- Lecture -
Modern CMake for Modular Design - by Mathieu Ropert, CppCon 2017.
- Article
- It’s Time To Do CMake Right (one of the best articles about
CMake).
- Articles - A series on CMake - by Martin Hořeňovský
- Lecture -
Introduction to CMake - by Florent Castelli, C++ Sweden 2018.
- Article -
Some nice and accurate CMake tips.
- Article
- Modern CMake for Library Developers.
- Article
- Effective Modern CMake: a great summary of most good practices - by
Manuel Binna.
- Book -
Professional CMake: A Practical Guide (paid).
- Book - Effective
CMake: Practical Advice to Write Better CMake (not fully written
yet).
- Web Book - An
Introduction to Modern CMake.
- YouTube
Series - How to CMake Good.
[CC0-1.0]
- Lecture -
More Modern CMake (slides &
examples)- by Deniz Bahadir, Meeting C++ 2018.
- Lecture -
Oh No! More Modern CMake (slides)-
by Deniz Bahadir, Meeting C++ 2019.
- Article
- Modifying the default CMake build types/flags, toolchains and patches
- Oh my! - by Cristian Adam.
- Tutorial
- Tutorial and Example on How to Properly Use Modern CMake.
Package Management / Build
Systems
- hunter -
Cross-platform package manager for C++ (based on CMake ExternalProject).
[BSD2]
- cget - CMake package
retrieval. This can be used to download and install CMake packages.
[BOOST]
- cppan - C++ Archive Network - C++
Package Manager based on CMake, implemented in C++14.
[APACHE2]
- cpm - C++ Package Manager
based on CMake and Git.
[MIT]
- conan - Conan C++
Package Manager, implemented in Python and has a CMake integration
backend.
[MIT]
- fips - High-level build
system/dependency management for distributed, multi-platform C/C++
projects.
[MIT]
- Ninja - Build
system that differs from others in two major respects: it is designed to
have its input files generated by a higher-level build system (like
CMake), and it is designed to run builds as fast as possible.
[APACHE2]
- vcpkg - A tool to
acquire and build C++ open source libraries. Uses CMake internally as a
build script language.
[MIT]
- pmm - PMM is a
module for CMake that manages… package managers.
[MIT]
- cpm - A setup-free
CMake + git dependency manager.
[MIT]
Modules
Utility Scripts
These provide a wide range of functionality - from dealing with
compiler flags to using tools. Some also contain modules.
Examples / Templates
- cmake-init -
Template for reliable, cross-platform C++ project setup using CMake.
[LICENSE]
- android-cmake -
Examples of using ruslo/hunter package manager
for an Android application.
[BSD2]
- hunter-simple -
Example of downloading/installing dependencies using ruslo/hunter package manager.
[BSD2]
- package-example
- Config mode of find_package (examples for this
Stack Overflow question).
[NO LICENSE]
- minimal_cmake_example
- Minimal CMake example, that covers dependencies and packaging.
[CC0-1.0]
- cmake-example -
Example project which demonstrates various CMake features.
[BSD3]
- cmake-examples -
Useful CMake examples in a tutorial format.
[MIT]
- mini-cmake-qt
- Minimal CMake template for Qt 5 projects.
[LICENSE]
- BASIS - CMake BASIS makes it easy to create
sharable software and libraries that work together.
[BSD2]
- cpp-boilerplate -
Template that aims to be a reference for modern CMake and CI.
[MIT]
- how-to-export-cpp-library
- An OS-agnostic template project for exporting either shared, static or
header-only C++ library, sporting ctest and CI support, written in plain
CMake with line-by-line tutorial comments.
[MIT]
- modern-cmake-sample
- Best practices and proper usage of CMake by using targets.
[NO LICENSE]
- CMakeInstallExample
- Installation example for a C++ project (Windows) with Cmake.
[NO LICENSE]
- cpp14-project-template
- A C++14 template with CI, tests, code coverage, docs and static
analysis integration.
[CC0-1.0]
- cmake_templates
- Templates for creating C++ libraries and executables (including
conan).
[NO LICENSE]
- cmake_snippets -
Short copy-pasteable CMake snippets.
[BSD3]
- cmake-cookbook - A
huge CMake cookbook full of recipes.
[MIT]
- cpp-template - A
template C++ repository, using CMake and Catch.
[NO LICENSE]
- pitchfork
- A set of conventions for native C and C++ projects.
[MIT]
- cmake-examples
- A collection of as simple as possible, modern CMake projects.
[MIT]
- cpp-project -
Boiler plate for C++ projects - tests, CI, coverage, docs.
[UNLICENSE]
- ModernCppStarter
- A template for modern C++ projects using CMake, CI, code coverage,
clang-format, reproducible dependency management, tests using doctest and much more.
[UNLICENSE]
Other
License
This is released under the Creative Commons Attribution 4.0 International
License (CC BY 4.0).