awesome-cmake
A curated list of awesome CMake resources, scripts, modules and examples.
https://github.com/onqtam/awesome-cmake
Last synced: 27 days ago
JSON representation
Community
Examples / Templates
-
cmake-init
- Template for reliable, cross-platform C++ project setup using CMake.
[LICENSE] -
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]][CC0-1.0] -
cmake-example
- Example project which demonstrates various CMake features. [
[BSD3]][BSD-3-Clause] -
cmake-examples
- Useful CMake examples in a tutorial format. [
[MIT]][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]][BSD-2-Clause] -
cpp-boilerplate
- Template that aims to be a reference for modern CMake and CI. [
[MIT]][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]][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]][CC0-1.0] -
cmake_templates
- Templates for creating C++ libraries and executables (including conan).
[NO LICENSE] -
cmake_snippets
- Short copy-pasteable CMake snippets. [
[BSD3]][BSD-3-Clause] -
cmake-cookbook
- A huge CMake cookbook full of recipes. [
[MIT]][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]][MIT] -
cmake-examples
- A collection of as simple as possible, modern CMake projects. [
[MIT]][MIT] -
cpp-project
- Boiler plate for C++ projects - tests, CI, coverage, docs. [
[UNLICENSE]][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]][UNLICENSE] -
SeeMake
- A feature-packed, ready-to-use CMake template with testing, static and dynamic checks, coverage reports, and more. [
[MIT]][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]][BOOST] -
cmake-modules
- This is a collection of additional CMake modules. Most of them are from Ryan Pavlik. [
[BOOST]][BOOST] -
CMake
- Eyescale's common CMake modules. [
[BSD3]][BSD-3-Clause] -
cmake-modules
- CMake modules for some scientific libraries. [
[BSD2]][BSD-2-Clause] -
cgcmake
- CMake modules for common applications related to computer graphics. [
[MIT]][MIT] -
FindMathematica
- CMake module for Mathematica. [
[MIT]][MIT] -
extra-cmake-modules
- KDE's extra modules and scripts for CMake. [
[BSD3]][BSD-3-Clause] -
FindICU.cmake
- CMake module to find International Components for Unicode (ICU) Library. [
[BSD2]][BSD-2-Clause] -
FindTBB
- CMake find module for Intel Threading Building Blocks. [
[MIT]][MIT] -
FindWiX
- CMake module for building Windows Installer packages with WiX toolset. [
[BSD3]][BSD-3-Clause] -
FindIDL
- CMake module for building IDL files with MIDL and generating CLR DLL using Tlbimp. [
[MIT]][MIT] -
cmake-modules
- hanjianwei's CMake module collection. [
[MIT]][MIT] -
CMakeCM
- CMake Community Modules.
[NO LICENSE] -
Metabench
- CMake module for compile-time microbenchmarks. [
[BOOST]][BOOST] -
better.cmake
- Collection of modern CMake extensions [
[APACHE2]][APACHE-2.0]
Other
-
UseLATEX
- Collection of CMake macros to simplify building LaTeX files. [
[BSD3]][BSD-3-Clause] -
scikit-build
- Improved build system generator for CPython C extensions. [
[MIT]][MIT] -
node-cmake
- CMake-based build system for node.js native modules. [
[ISC]][ISC] -
cmake-font-lock
- Advanced syntax coloring support for CMake scripts inside Emacs. [
[GPL]][GPL] -
autovala
- Program that automatically generates CMake configuration files for your Vala project. [
[GPL]][GPL] -
catkin
- CMake-based build system that is used to build all packages in Robot Operating System (ROS). [
[BSD3]][BSD-3-Clause] -
suitesparse-metis-for-windows
- CMake scripts for painless usage of SuiteSparse+METIS. [
[BSD3]][BSD-3-Clause] -
osg-3rdparty-cmake
- CMake scripts for building OpenSceneGraph third party libraries.
[MIXED LICENSE] -
cmake-d
- CMake for D2. [
[MIT]][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]][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]][CC0-1.0] -
cmake-ast
- Python module to reduce a CMake file to an AST. [
[MIT]][MIT] -
cmake-checks-cache
- CMake checks cache helper modules. [
[MIT]][MIT] -
cmake_check
- Static analysis (linter) for the CMake language (e.g. to enforce modern CMake rules). [
[MIT]][MIT] -
cmake-language-server
- CMake Language Server Protocol Implementation. [
[MIT]][MIT] -
version-from-git
- Bake git information into your binary. [
[MIT]][MIT] -
SoCMake
- CMake based build system for hardware (ASIC, FPGA) and System-on-Chip build automation. [
[LGPL]][LGPL] -
cmake-maven-plugin
- CMake integration for Maven builds. [
[APACHE2]][APACHE2] -
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]][BSD-3-Clause] -
cmakefmt
- Fast, native CMake formatter written in Rust with format-on-save editor support and a first-party GitHub Action. [
[MIT]][MIT] -
cmake-xray
- Analyze and diagnose CMake-based C++ builds from compile databases and CMake File API data. [
[MIT]][MIT]
Package Management / Build Systems
-
vcpkg
- A tool to acquire and build C++ open source libraries. Uses CMake internally as a build script language. [
[MIT]][MIT] -
hunter
- Cross-platform package manager for C++ (based on CMake ExternalProject). [
[BSD2]][BSD-2-Clause] -
cget
- CMake package retrieval. This can be used to download and install CMake packages. [
[BOOST]][BOOST] -
cppan
- C++ Archive Network - C++ Package Manager based on CMake, implemented in C++14. [
[APACHE2]][APACHE2] -
cpm
- C++ Package Manager based on CMake and Git. [
[MIT]][MIT] -
conan
- Conan C++ Package Manager, implemented in Python and has a CMake integration backend. [
[MIT]][MIT] -
fips
- High-level build system/dependency management for distributed, multi-platform C/C++ projects. [
[MIT]][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]][APACHE2] -
pmm
- PMM is a module for CMake that manages... package managers. [
[MIT]][MIT] -
FetchDependency
- Configuration-time retrieval, configuration and building of dependencies. [
[MIT]][MIT] -
cpm
- A setup-free CMake + git dependency manager. [
[MIT]][MIT]
Resources
- Latest Documentation
- FAQ
- Wiki
- Tutorial - Modern CMake tutorials part1: CMake basics
- Article - Opt-in header-only libraries with CMake.
- Article - Ultimate Guide to Modern CMake.
- Lecture - Effective CMake - by Daniel Pfeifer, C++Now 2017.
- 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).
- Basic CMake usage
- Basic CMake, part 2: libraries
- Lecture - Introduction to CMake - by Florent Castelli, C++ Sweden 2018.
- 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]][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.
-
Web Book
- CGold: The Hitchhiker’s Guide to the CMake. [
[BSD2]][BSD-2-Clause] -
Modern CMake
- Modern CMake PDF and samples by the creator of cmakepp. [
[MIT]][MIT] - Tutorial - Tutorial and Example on How to Properly Use Modern CMake.
- Article - A list of common CMake antipatterns (from 2013 but still relevant).
Toolchains
-
cmake
- Collection of CMake toolchain files, mostly for static linking. [
[APACHE2]][APACHE2] -
dockcross
- Cross compiling toolchains in Docker images. [
[MIT]][MIT] -
android-cmake
- CMake toolchain file and other scripts for the Android NDK. [
[BSD3]][BSD-3-Clause] -
ios-cmake
- Toolchain file and examples using CMake for iOS development. [
[BSD3]][BSD-3-Clause] -
qt-android-cmake
- For building and deploying Qt based apps on Android without QtCreator.
[LICENSE] -
cmake-avr
- CMake toolchain for AVR.
[LICENSE] -
arduino-cmake
- This is the CMake project settings for the Arduino platform. [
[MPL]][MPL] -
polly
- Collection of CMake toolchain files and scripts for cross-platform build and CI testing. [
[BSD2]][BSD-2-Clause] -
toolchains
- For cross-compiling with CMake. They are meant to be mainly used on ArchLinux.
[NO LICENSE] -
Arduino-CMake-Toolchain
- CMake toolchain for all official and 3rd party Arduino platforms. [
[MIT]][MIT]
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]][MIT] -
ucm
- For managing compiler/linker flags, collecting sources, precompiled headers, unity builds and others. [
[MIT]][MIT] -
cmakepp
- Enhancement Suite for the CMake Build System. [
[MIT]][MIT] -
sugar
- CMake tools and examples: collecting source files, warnings suppression, etc. [
[BSD2]][BSD-2-Clause] -
DownloadProject
- CMake module for downloading an external project's source at configure time. [
[MIT]][MIT] -
buildem
- Modular CMake-based system that leverages ExternalProject to simplify builds.
[LICENSE] -
coveralls-cmake
- Coveralls JSON coverage generator and uploader for CMake. [
[MIT]][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]][MIT] -
cppcheck-target-cmake
- Per-target CPPCheck for CMake. [
[MIT]][MIT] -
clang-tidy-target-cmake
- Add clang-tidy checks to a target using CMake. [
[MIT]][MIT] -
cmake-unit
- Unit testing framework for CMake. [
[MIT]][MIT] -
cmake-header-language
- CMake macro to determine the language of a header file. [
[MIT]][MIT] -
tooling-cmake-util
- Utility and common library for all polysquare CMake tools. [
[MIT]][MIT] -
iwyu-target-cmake
- CMake integration for include-what-you-use. [
[MIT]][MIT] -
sanitizers-cmake
- CMake module to enable sanitizers for binary targets. [
[MIT]][MIT] -
cmake-precompiled-header
- Visual Studio and GCC precompiled header macro.
[LICENSE] -
CMakePCHCompiler
- CMake precompiled headers via custom compiler extension - with reuse support! [
[MIT]][MIT] -
cmake-get
- Get dependencies in config or script mode.
[NO LICENSE] -
fetch_paths.cmake
- Lightweight utility to simplify file/directory path retrieval in CMake, supporting dynamic searches and flexible output formats.
[MIT] -
ixm
- Make CMake less painful when trying to write Modern Flexible CMake. [
[MIT]][MIT]