本文档来自以下github资源的翻译和整理,CMake资源、脚本、模块、示例和其他优秀资源的整理列表。



Community

Resources

  • Latest Documentation
  • FAQ
  • Wiki
  • Webinars
  • 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]
  • 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 - Modern C++ CI (although it uses non-modern CMake like include_directories()).
  • 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]][CC0-1.0]

Package Management / Build Systems

  • 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]
  • vcpkg - A tool to acquire and build C++ open source libraries. Uses CMake internally as a build script language. [[MIT]][MIT]
  • pmm - PMM is a module for CMake that manages... package managers. [[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]
  • sdl2-cmake-scripts - CMake scripts for finding the SDL2, SDL2image and SDL2ttf libraries and headers. [[BSD2]][BSD-2-Clause]
  • vfxcmake - CMake Find modules for common vfx software, and general CMake utility code. [[LGPL]][LGPL]
  • 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]
  • cmake-modules - hanjianwei's CMake module collection. [[MIT]][MIT]
  • YCM - Extra CMake Modules for Yet Another Robot Platform and friends. [[BSD3]][BSD-3-Clause]

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]][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-codecov - Enables code coverage and generates coverage reports with CMake targets. [[GPL]][GPL]
  • leatherman - Collection of C++ and CMake utility libraries. [[APACHE2]][APACHE2]
  • cmake-get - Get dependencies in config or script mode. [NO LICENSE]

Toolchains

  • 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]
  • mingw-w64-cmake - CMake-based MinGW-w64 Cross Toolchain - to build Windows binaries of mpv. [[ISC]][ISC]
  • 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 crosscompiling with CMake. They are meant to be mainly used on ArchLinux. [NO LICENSE]
  • cmake - Collection of CMake toolchain files, mostly for static linking. [[APACHE2]][APACHE2]

Examples / Templates

  • cmake-init - Template for reliable, cross-platform C++ project setup using CMake. [LICENSE]
  • learning-cmake - This is a simple CMake practice project which contains some different scenarios. [[GPL2]][GPL2]
  • cmake_test - Small example project using CMake. [NO LICENSE]
  • android-cmake - Examples of using ruslo/hunter package manager for an Android application. [[BSD2]][BSD-2-Clause]
  • hunter-simple - Example of downloading/installing dependencies using ruslo/hunter package manager. [[BSD2]][BSD-2-Clause]
  • weather - Example of using Hunter cross-platform package manager for CMake to build application which use Boost, CppNetlib.URI, GTest, JSON Spirit. Platforms: Windows (Visual Studio), Linux, Mac OS X + iOS. [[BSD2]][BSD-2-Clause]
  • package-example - Config mode of find_package (examples for this Stack Overflow question). [NO LICENSE]
  • CMakeTemplates - Set of initial CMake templates that I use for every game port I work on. [NO LICENSE]
  • minimalcmakeexample - 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]
  • cmake-templates - Some CMake Templates. Qt, Boost, OpenCV, C++11, etc. [[MIT]][MIT]
  • CppProjectTemplate - Basic, but working, C++ project using CMake, boost and Doxygen. [[MIT]][MIT]
  • mini-cmake-qt - Minimal CMake template for Qt 5 projects. [LICENSE]
  • CMake-VisualStudio-Example - CMake example for Visual Studio developers - blog post. [NO LICENSE]
  • Cpp-Project-Template - C++ bootstrap project template including CMake build system. [[MIT]][MIT]
  • BASIS - CMake BASIS makes it easy to create sharable software and libraries that work together. [[BSD2]][BSD-2-Clause]
  • OpenGLCMakeSkeleton - A ready to use CMake skeleton using GLFW, Glew and glm. [[MIT]][MIT]
  • coveralls-cmake-example - Example project for coveralls-cmake. [NO LICENSE]
  • cppbase - Template for a simple CMake-based C++ project. [[MIT]][MIT]
  • Arduino-CMake-Template - Starting point for Arduino development using CMake. [NO LICENSE]
  • c-template - Boilerplate to set up a c project, include CuTest, CMake build setup. [[MIT]][MIT]
  • cppprojecttemplate - Simple template to start quickly a C++ project managed by CMake. [[MIT]][MIT]
  • cpp-boilerplate - Template that aims to be a reference for modern CMake and CI. [[MIT]][MIT]
  • ci_helloworld - A simple example of how to setup a complete CI environment for C and C++. [[MIT]][MIT]
  • how-to-export-cpp-library - An OS-agnostic C++ library template sporting ctest and CI support, written in plain CMake with line-by-line guiding comments. [[MIT]][MIT]
  • ModernCppCI - An example of doing a Modern C++ project with CI (although it uses non-modern CMake like include_directories()). [[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]

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]][BSD-3-Clause]
  • UseLATEX - Collection of CMake macros to simplify building LaTeX files. [[BSD3]][BSD-3-Clause]
  • python-cmake-buildsystem - Replacement buildsystem for CPython. [[APACHE2]][APACHE2]
  • scikit-build - Improved build system generator for CPython C extensions. [[MIT]][MIT]
  • protobuf-cmake - CMake build support for Google Protobufs. [[BSD3]][BSD-3-Clause]
  • 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]
  • stm32-cmake - Used to develop applications for the STM32 - ST's ARM Cortex-M0(3,4,7) MCUs. [[MIT]][MIT]
  • 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]
  • cython-cmake-example - Utilities and example for using CMake to build Cython modules. [LICENSE]
  • 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]
  • tbb - Threading Building Blocks with CMake build. [[APACHE2]][APACHE2]
  • sqlite.cmake.build - CMake script for sqlite amalgamation. [NO LICENSE]
  • cmake-ast - Python module to reduce a CMake file to an AST. [[MIT]][MIT]
  • cmake_format - Source code formatter for CMakeLists.txt files. [[GPL]][GPL]
  • cmake-checks-cache - CMake checks cache helper modules. [[MIT]][MIT]
  • cmrc - A Resource Compiler in a Single CMake Script (compile arbitrary data into a program). [[MIT]][MIT]
  • cmake_check - Static analysis (linter) for the CMake language (e.g. to enforce modern CMake rules). [[MIT]][MIT]