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)
.