Awesome CMake
A curated list of awesome CMake resources, scripts, modules and examples.
This page lists names, links and short descriptions. The original list on GitHub is the source and belongs to its authors.
Community
/r/cpp on Reddit
Discussions, articles, and news about programming in C++.
Resources
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).
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]
FetchDependency
Configuration-time retrieval, configuration and building of dependencies. [MIT]
Modules
cmake-modules
Ryan Pavlik's collection of CMake modules. There are a number of find modules, especially for virtual reality and physical simulation, some utility modules, and some patches or workarounds for CMake itself. [BOOST]
cmake-modules
This is a collection of additional CMake modules. Most of them are from Ryan Pavlik. [BOOST]
CMake
Eyescale's common CMake modules. [BSD3]
cmake-modules
CMake modules for some scientific libraries. [BSD2]
cgcmake
CMake modules for common applications related to computer graphics. [MIT]
FindMathematica
CMake module for Mathematica. [MIT]
extra-cmake-modules
KDE's extra modules and scripts for CMake. [BSD3]
FindICU.cmake
CMake module to find International Components for Unicode (ICU) Library. [BSD2]
FindTBB
CMake find module for Intel Threading Building Blocks. [MIT]
FindWiX
CMake module for building Windows Installer packages with WiX toolset. [BSD3]
FindIDL
CMake module for building IDL files with MIDL and generating CLR DLL using Tlbimp. [MIT]
cmake-modules
hanjianwei's CMake module collection. [MIT]
YCM
Extra CMake Modules for Yet Another Robot Platform and friends. [BSD3]
CMakeCM
CMake Community Modules. [NO LICENSE]
Metabench
CMake module for compile-time microbenchmarks. [BOOST]
Oranges
Ben Vining's library of CMake modules and toolchains [GPL]
better.cmake
Collection of modern CMake extensions [[APACHE2]][APACHE-2.0]
Utility Scripts
cotire
Cotire (compile time reducer) is a CMake module that speeds up the build process of CMake based build systems by fully automating techniques as precompiled headers and unity builds for C and C++. [MIT]
ucm
For managing compiler/linker flags, collecting sources, precompiled headers, unity builds and others. [MIT]
cmakepp
Enhancement Suite for the CMake Build System. [MIT]
sugar
CMake tools and examples: collecting source files, warnings suppression, etc. [BSD2]
DownloadProject
CMake module for downloading an external project's source at configure time. [MIT]
buildem
Modular CMake-based system that leverages ExternalProject to simplify builds. [LICENSE]
coveralls-cmake
Coveralls JSON coverage generator and uploader for CMake. [MIT]
compatibility
Improved version of cmake-compile-features. [LICENSE]
cmake-modules
LibFindMacros development repository and other cool CMake stuff. [LICENSE]
GreatCMakeCookOff
This is a repository of useful and less than useful CMake recipes. [MIT]
cppcheck-target-cmake
Per-target CPPCheck for CMake. [MIT]
clang-tidy-target-cmake
Add clang-tidy checks to a target using CMake. [MIT]
cmake-unit
Unit testing framework for CMake. [MIT]
cmake-header-language
CMake macro to determine the language of a header file. [MIT]
tooling-cmake-util
Utility and common library for all polysquare CMake tools. [MIT]
iwyu-target-cmake
CMake integration for include-what-you-use. [MIT]
sanitizers-cmake
CMake module to enable sanitizers for binary targets. [MIT]
cmake-precompiled-header
Visual Studio and GCC precompiled header macro. [LICENSE]
CMakePCHCompiler
CMake precompiled headers via custom compiler extension - with reuse support! [MIT]
CMake-codecov
Enables code coverage and generates coverage reports with CMake targets. [GPL]
cmake-get
Get dependencies in config or script mode. [NO LICENSE]
ixm
Make CMake less painful when trying to write Modern Flexible CMake. [MIT]
CMakeCooking
Flexible development environments for CMake projects with external dependencies . [APACHE2]
fetch_paths.cmake
Lightweight utility to simplify file/directory path retrieval in CMake, supporting dynamic searches and flexible output formats. [MIT]
Toolchains
dockcross
Cross compiling toolchains in Docker images. [MIT]
android-cmake
CMake toolchain file and other scripts for the Android NDK. [BSD3]
ios-cmake
Toolchain file and examples using CMake for iOS development. [BSD3]
qt-android-cmake
For building and deploying Qt based apps on Android without QtCreator. [LICENSE]
mingw-w64-cmake
CMake-based MinGW-w64 Cross Toolchain - to build Windows binaries of mpv. [ISC]
cmake-avr
CMake toolchain for AVR. [LICENSE]
arduino-cmake
This is the CMake project settings for the Arduino platform. [MPL]
polly
Collection of CMake toolchain files and scripts for cross-platform build and CI testing. [BSD2]
toolchains
For cross-compiling with CMake. They are meant to be mainly used on ArchLinux. [NO LICENSE]
cmake
Collection of CMake toolchain files, mostly for static linking. [APACHE2]
Arduino-CMake-Toolchain
CMake toolchain for all official and 3rd party Arduino platforms. [MIT]
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]
SeeMake
A feature-packed, ready-to-use CMake template with testing, static and dynamic checks, coverage reports, and more. [MIT]
Other
autocmake
Using a autocmake.yml file Autocmake composes CMake building blocks into a CMake project and generates CMakeLists.txt as well as a setup script, which serves as a front-end to CMakeLists.txt. [BSD3]
UseLATEX
Collection of CMake macros to simplify building LaTeX files. [BSD3]
scikit-build
Improved build system generator for CPython C extensions. [MIT]
node-cmake
CMake-based build system for node.js native modules. [ISC]
cmake-font-lock
Advanced syntax coloring support for CMake scripts inside Emacs. [GPL]
autovala
Program that automatically generates CMake configuration files for your Vala project. [GPL]
catkin
CMake-based build system that is used to build all packages in Robot Operating System (ROS). [BSD3]
suitesparse-metis-for-windows
CMake scripts for painless usage of SuiteSparse+METIS. [BSD3]
osg-3rdparty-cmake
CMake scripts for building OpenSceneGraph third party libraries. [MIXED LICENSE]
cmake-d
CMake for D2. [MIT]
cmakeprojectmanager2
Enhanced CMake Project Manager plugin for Qt Creator. [NO LICENSE]
cmake-lint
Check for coding style issues in CMake files. cmakelint requires Python. [APACHE2]
git-cmake-format
Integrate clang-format into your CMake project hosted in a git repository. [LICENSE]
cmakefmt
Fast, native CMake formatter written in Rust with format-on-save editor support and a first-party GitHub Action. [MIT]
configure-cmake
configure-cmake is an autotools-style configure script for CMake-based projects. [CC0-1.0]
cmake-ast
Python module to reduce a CMake file to an AST. [MIT]
cmake-checks-cache
CMake checks cache helper modules. [MIT]
cmake_check
Static analysis (linter) for the CMake language (e.g. to enforce modern CMake rules). [MIT]
cmake-language-server
CMake Language Server Protocol Implementation. [MIT]
cmake-xray
Analyze and diagnose CMake-based C++ builds from compile databases and CMake File API data. [MIT]
cmake-maven-plugin
CMake integration for Maven builds. [APACHE2]
version-from-git
Bake git information into your binary. [MIT]
SoCMake
CMake based build system for hardware (ASIC, FPGA) and System-on-Chip build automation. [LGPL]
Related lists in Programming Languages
See categoryAwesome Rust
rust-unofficial/awesome-rust
A curated list of Rust code and resources.
Awesome Mac
jaywcjlove/awesome-mac
This project is dedicated to collecting high-quality macOS software and organizing them systematically by different categories for easy search and use.
Awesome Python
vinta/awesome-python
The definitive list that answers "I want to do X in Python, which tool should I use?"
Awesome C++
fffaraz/awesome-cpp
A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff.
Awesome Go
avelino/awesome-go
A curated list of awesome Go frameworks, libraries and software
Awesome PHP
ziadoz/awesome-php
A curated list of amazingly awesome PHP libraries, resources and shiny things.