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