Courses & TutorialsProgramming
Awesome CMake – Massive Collection of Resources
A curated list of awesome CMake scripts, modules, examples and others
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
- Community
- Resources
- Package Management / Build Systems
- Modules
- Utility Scripts
- Toolchains
- Examples / Templates
- Other
Community
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
- 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]
Utility Scripts
These provide a wide range of functionality – from dealing with compiler flags to using tools. Some also contain modules.
- 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]
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]
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]
- 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-maven-plugin – CMake integration for Maven builds.
[APACHE2]