Skip to content

CMake

Awesome CMake Awesome

> 精选清单 CMake 脚本、模块、示例和其他

非常欢迎您的贡献(先看 https://github.com/onqtam/awesome-cmake/blob/master/CONTRIBUTING.md).

还有一个文件 https://github.com/onqtam/awesome-cmake/blob/master/NonModernCMake.md 与其他值得一看的链接,但它们使用被认为是非现代的过时做法——比如不使用基于“target_*”的依赖管理——请参阅 #16#42 更多细节.

Community

Resources

  • Latest Documentation
  • FAQ
  • Wiki
  • Webinars
  • Web Book - CGold:漫游者 Guide 到 CMake. [[BSD2]][BSD-2-Clause]
  • Modern CMake - 现代 CMake PDF 和创建者的样本 cmakepp . [[带]][带]
  • Tutorial - 现代 CMake 教程第 1 部分:CMake 基础知识
  • Article - 轻松支持 CMake 安装和 find_package().
  • Article - 使用 CMake 和 Git 轻松管理 C++ 的依赖项.
  • Article - 使用 CMake 选择加入仅标头库.
  • Article - 现代 CMake 终极指南.
  • Article - 常见 CMake 反模式列表(从 2013 年开始,但仍然相关).
  • Article - 如何构建基于 CMake 的项目.
  • Article - 在 15 分钟内学习 CMake 的脚本语言.
  • Article - CMake 的架构.
  • Lecture - Effective CMake - 作者 Daniel Pfeifer,C++Now 2017.
  • Article - 使用 CMake 构建跨平台 CUDA 应用程序.
  • Tutorial - 了解 CMake 的分步指南.
  • Article + Lecture - 拥抱现代 CMake - 斯蒂芬·凯利 (Stephen Kelly).
  • Lecture - 用于模块化设计的现代 CMake - Mathieu Ropert,CppCon 2017.
  • Article - It's Time To Do CMake Right(关于 CMake 的最佳文章之一).
  • 文章 - 关于 CMake 的系列文章 - Martin Hořeňovský
  • Lecture - CMake 简介 - Florent Castelli,C++ Sweden 2018.
  • Article - 一些不错且准确的 CMake 技巧.
  • Article - 适用于图书馆开发人员的现代 CMake.
  • Article - Effective Modern CMake:大多数良好实践的重要总结 - 曼努埃尔·宾纳 (Manuel Binna).
  • Book - 专业 CMake:实用指南(付费).
  • Book - Effective CMake:编写更好的 CMake 的实用建议(尚未完全编写).
  • Web Book - 现代 CMake 简介.
  • YouTube Series - 如何 CMake Good. [[CC0-1.0]][CC0-1.0]
  • Lecture - 更现代的 CMake (slides & examples) 作者:Deniz Bahadir,Meeting C++ 2018.
  • Lecture - 不好了! 更现代的 CMake(slides) 作者:Deniz Bahadir,Meeting C++ 2019.
  • Article - 修改默认的 CMake 构建类型/标志、工具链和补丁 - 天哪! - 克里斯蒂安亚当.
  • Tutorial - 关于如何正确使用现代 CMake 的教程和示例.

Package Management / Build Systems

  • hunter - C++ 的跨平台包管理器(基于 CMake ExternalProject). [[BSD2]][BSD-2-Clause]
  • cget - CMake 包检索. 这可用于下载和安装 CMake 包. [[提升]][提升]
  • cppan - C++ Archive Network - 基于 CMake 的 C++ 包管理器,在 C++14 中实现. [[APACHE2]][APACHE2]
  • cpm - 基于 CMake 和 Git 的 C++ 包管理器. [[麻省理工学院]][麻省理工学院]
  • conan - Conan C++ 包管理器,用 Python 实现并具有 CMake 集成后端. [[麻省理工学院]][麻省理工学院]
  • fips - 分布式、多平台 C/C++ 项目的高级构建系统/依赖管理. [[麻省理工学院]][麻省理工学院]
  • Ninja - 构建系统在两个主要方面不同于其他系统:它旨在让其输入文件由更高级别的构建系统(如 CMake)生成,并且旨在尽可能快地运行构建. [[APACHE2]][APACHE2]
  • vcpkg - 获取和构建 C++ 开源库的工具. 在内部使用 CMake 作为构建脚本语言. [[麻省理工学院]][麻省理工学院]
  • pmm - PMM 是 CMake 的一个模块,用于管理...包管理器. [[麻省理工学院]][麻省理工学院]
  • cpm - 一个免安装的 CMake + git 依赖管理器. [[麻省理工学院]][麻省理工学院]

Modules

  • cmake-modules - Ryan Pavlik的 CMake 模块集合. 有许多查找模块,尤其是用于虚拟现实和物理模拟的模块、一些实用程序模块,以及一些针对 CMake 本身的补丁或解决方法. [[提升]][提升]
  • cmake-modules - 这是附加 CMake 模块的集合. 其中大部分来自 Ryan Pavlik. [[提升]][提升]
  • CMake - Eyescale的通用 CMake 模块. [[BSD3]][BSD-3-Clause]
  • cmake-modules - 一些科学图书馆的 CMake 模块. [[BSD2]][BSD-2-Clause]
  • cgcmake - 用于与计算机图形相关的常见应用程序的 CMake 模块. [[麻省理工学院]][麻省理工学院]
  • FindMathematica - Mathematica 的 CMake 模块. [[麻省理工学院]][麻省理工学院]
  • extra-cmake-modules - KDE用于 CMake 的额外模块和脚本. [[BSD3]][BSD-3-Clause]
  • FindICU.cmake - 用于查找 Unicode (ICU) 库国际组件的 CMake 模块. [[BSD2]][BSD-2-Clause]
  • FindTBB - 用于英特尔线程构建模块的 CMake 查找模块. [[麻省理工学院]][麻省理工学院]
  • FindWiX - 用于构建的 CMake 模块 Windows Installer 包与 WiX toolset . [[BSD3]][BSD-3-Clause]
  • FindIDL - 用于构建的 CMake 模块 IDL 使用 MIDL 生成 CLR DLL 文件 Tlbimp . [[带]][带]
  • cmake-modules - hanjianwei的 CMake 模块集合. [[麻省理工学院]][麻省理工学院]
  • YCM - 额外的 CMake 模块 Yet Another Robot Platform 和朋友. [[BSD3]][BSD-3-Clause]
  • CMakeCM - CMake 社区模块. [无许可证]
  • Metabench - 用于编译时微基准测试的 CMake 模块. [[提升]][提升]
  • Oranges - Ben ViningCMake 模块和工具链的库 [[GPL]][GPL]

Utility Scripts

它们提供了广泛的功能——从处理编译器标志到使用工具. 有些还包含模块.

  • cotire - Cotire(编译时间减少器)是一个 CMake 模块,它通过完全自动化技术作为 C 和 C++ 的预编译头文件和统一构建来加速基于 CMake 的构建系统的构建过程. [[麻省理工学院]][麻省理工学院]
  • ucm - 用于管理编译器/链接器标志、收集源代码、预编译头文件、统一构建等. [[麻省理工学院]][麻省理工学院]
  • cmakepp - CMake 构建系统的增强套件. [[麻省理工学院]][麻省理工学院]
  • sugar - CMake 工具和示例:收集源文件、警告抑制等 [[BSD2]][BSD-2-Clause]
  • DownloadProject - 用于在配置时下载外部项目源代码的 CMake 模块. [[麻省理工学院]][麻省理工学院]
  • buildem - 基于 CMake 的模块化系统,利用 ExternalProject 来简化构建. [许可证]
  • coveralls-cmake - 用于 CMake 的 Coveralls JSON 覆盖生成器和上传器. [[麻省理工学院]][麻省理工学院]
  • compatibility - cmake-compile-features 的改进版本. [[许可证]](https://github.com/foonathan/compatibility/blob/master/LICENSE
  • cmake-modules - LibFindMacros development repository and other cool CMake stuff. [LICENSE]
  • GreatCMakeCookOff - 这是有用和不太有用的 CMake 配方的存储库. [[麻省理工学院]][麻省理工学院]
  • cppcheck-target-cmake - 用于 CMake 的每个目标 CPPCheck. [[麻省理工学院]][麻省理工学院]
  • clang-tidy-target-cmake - 使用 CMake 向目标添加 clang-tidy 检查. [[麻省理工学院]][麻省理工学院]
  • cmake-unit - CMake 的单元测试框架. [[麻省理工学院]][麻省理工学院]
  • cmake-header-language - CMake 宏来确定头文件的语言. [[麻省理工学院]][麻省理工学院]
  • tooling-cmake-util - 所有 polysquare CMake 工具的实用程序和通用库. [[麻省理工学院]][麻省理工学院]
  • iwyu-target-cmake - CMake 集成以包含您使用的内容. [[麻省理工学院]][麻省理工学院]
  • sanitizers-cmake - 用于为二进制目标启用消毒剂的 CMake 模块. [[麻省理工学院]][麻省理工学院]
  • cmake-precompiled-header - Visual Studio and GCC precompiled header macro. [LICENSE]
  • CMakePCHCompiler - 通过自定义编译器扩展 CMake 预编译标头 - 支持重用! [[麻省理工学院]][麻省理工学院]
  • CMake-codecov - 启用代码覆盖率并使用 CMake 目标生成覆盖率报告. [[GPL]][GPL]
  • cmake-get - 在配置或脚本模式下获取依赖项. [无许可证]
  • ixm - 在尝试编写 Modern Flexible CMake 时让 CMake 不那么痛苦. [[麻省理工学院]][麻省理工学院]
  • CMakeCooking - 具有外部依赖项的 CMake 项目的灵活开发环境 . [[APACHE2]][APACHE2]

Toolchains

  • dockcross - Docker 镜像中的交叉编译工具链. [[麻省理工学院]][麻省理工学院]
  • android-cmake - 用于 Android NDK 的 CMake 工具链文件和其他脚本. [[BSD3]][BSD-3-Clause]
  • ios-cmake - 使用 CMake 进行 iOS 开发的工具链文件和示例. [[BSD3]][BSD-3-Clause]
  • qt-android-cmake - 用于在没有 QtCreator 的情况下在 Android 上构建和部署基于 Qt 的应用程序. [许可证]
  • mingw-w64-cmake - 基于 CMake 的 MinGW-w64 交叉工具链 - 构建 mpv 的 Windows 二进制文件. [[ISC]][ISC]
  • cmake-avr - 用于 AVR 的 CMake 工具链. [许可证]
  • arduino-cmake - 这是 Arduino 平台的 CMake 项目设置. [[MPL]][MPL]
  • polly - 用于跨平台构建和 CI 测试的 CMake 工具链文件和脚本的集合. [[BSD2]][BSD-2-Clause]
  • toolchains - 用于与 CMake 交叉编译. 它们主要用于 ArchLinux. [无许可证]
  • cmake - CMake 工具链文件的集合,主要用于静态链接. [[APACHE2]][APACHE2]
  • Arduino-CMake-Toolchain - 适用于所有官方和第 3 方 Arduino 平台的 CMake 工具链. [[麻省理工学院]][麻省理工学院]

Examples / Templates

  • cmake-init - 使用 CMake 进行可靠的跨平台 C++ 项目设置的模板. [许可证]
  • android-cmake - 使用示例 ruslo/hunter Android 应用程序的包管理器. [[BSD2]][BSD-2-Clause]
  • hunter-simple - 使用下载/安装依赖项的示例 ruslo/hunter 包管理器. [[BSD2]][BSD-2-Clause]
  • package-example - find_package 的配置模式(示例 this 堆栈溢出问题). [无许可证]
  • minimal_cmake_example - 最小的 CMake 示例,涵盖依赖项和打包. [[CC0-1.0]][CC0-1.0]
  • cmake-example - 演示各种 CMake 功能的示例项目. [[BSD3]][BSD-3-Clause]
  • cmake-examples - Useful CMake examples in a tutorial format. [[MIT]][MIT]
  • mini-cmake-qt - Qt 5 项目的最小 CMake 模板. [许可证]
  • BASIS -CMake BASIS 使创建协同工作的可共享软件和库变得容易. [[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 - 一个与操作系统无关的模板项目,用于导出共享、静态或仅标头的 C++ 库,运动 ctest 和 CI 支持,用普通 CMake 编写,带有逐行教程注释. [[麻省理工学院]][麻省理工学院]
  • modern-cmake-sample - 通过使用目标来最佳实践和正确使用 CMake. [无许可证]
  • CMakeInstallExample - 使用 Cmake 的 C++ 项目 (Windows) 安装示例. [无许可证]
  • cpp14-project-template - 带有 CI、测试、代码覆盖率、文档和静态分析集成的 C++14 模板. [[CC0-1.0]][CC0-1.0]
  • cmake_templates - 用于创建 C++ 库和可执行文件(包括柯南)的模板. [无许可证]
  • cmake_snippets - 可复制粘贴的简短 CMake 片段. [[BSD3]][BSD-3-Clause]
  • cmake-cookbook - 一本巨大的 CMake 食谱,里面全是食谱. [[麻省理工学院]][麻省理工学院]
  • cpp-template - 模板 C++ 存储库,使用 CMake 和 Catch. [无许可证]
  • pitchfork - 本机 C 和 C++ 项目的一组约定. [[麻省理工学院]][麻省理工学院]
  • cmake-examples - 一组尽可能简单的现代 CMake 项目. [[麻省理工学院]][麻省理工学院]
  • cpp-project - C++ 项目的样板 - 测试、CI、覆盖率、文档. [[未授权]][未授权]
  • ModernCppStarter - 使用 CMake、CI、代码覆盖率、clang 格式、可重现的依赖管理、使用的测试的现代 C++ 项目模板 doctest 以及更多. [[未授权]][未授权]

Other

  • autocmake - 使用 autocmake.yml 文件 Autocmake 将 CMake 构建块组合到 CMake 项目中,并生成 CMakeLists.txt 以及设置脚本,该脚本用作 CMakeLists.txt 的前端. [[BSD3]][BSD-3-Clause]
  • UseLATEX - 收集 CMake 宏以简化构建 LaTeX 文件. [[BSD3]][BSD-3-Clause]
  • scikit-build - 改进了 CPython C 扩展的构建系统生成器. [[麻省理工学院]][麻省理工学院]
  • node-cmake - 用于 node.js 本机模块的基于 CMake 的构建系统. [[ISC]][ISC]
  • cmake-font-lock - 对 Emacs 中的 CMake 脚本的高级语法着色支持. [[GPL]][GPL]
  • autovala - 自动为您的 Vala 项目生成 CMake 配置文件的程序. [[GPL]][GPL]
  • catkin - 基于 CMake 的构建系统,用于构建机器人操作系统 (ROS) 中的所有包. [[BSD3]][BSD-3-Clause]
  • suitesparse-metis-for-windows - 用于轻松使用 SuiteSparse+METIS 的 CMake 脚本. [[BSD3]][BSD-3-Clause]
  • osg-3rdparty-cmake - 用于构建 OpenSceneGraph 第三方库的 CMake 脚本. [混合许可证]
  • cmake-d - 用于 D2 的 CMake. [[麻省理工学院]][麻省理工学院]
  • cmakeprojectmanager2 - 增强了 Qt Creator 的 CMake 项目管理器插件. [无许可证]
  • cmake-lint - 检查 CMake 文件中的编码风格问题. cmakelint 需要 Python. [[APACHE2]][APACHE2]
  • git-cmake-format - 将 clang-format 集成到 git 存储库中托管的 CMake 项目中. [许可证]
  • configure-cmake - configure-cmake 是用于基于 CMake 的项目的 autotools 样式的配置脚本. [[CC0-1.0]][CC0-1.0]
  • cmake-ast - 将 CMake 文件简化为 AST 的 Python 模块. [[麻省理工学院]][麻省理工学院]
  • cmake-checks-cache - CMake 检查缓存辅助模块. [[麻省理工学院]][麻省理工学院]
  • cmake_check - CMake 语言的静态分析(linter)(例如,执行现代 CMake 规则). [[麻省理工学院]][麻省理工学院]
  • cmake-language-server - CMake 语言服务器协议实现. [[麻省理工学院]][麻省理工学院]
  • cmake-maven-plugin - Maven 构建的 CMake 集成. [[APACHE2]][APACHE2]
  • version-from-git - 将 git 信息烘焙到您的二进制文件中. [[麻省理工学院]][麻省理工学院]

License

这是在下发布 Creative Commons Attribution 4.0 International 许可证(CC BY 4.0).

[ISC]:https://opensource.org/licenses/ISC [GPL]:https://www.gnu.org/licenses/gpl-3.0.html [GPL2]:https://www.gnu.org/licenses/old-licenses/gpl-2.0.html [LGPL]:https://www.gnu.org/licenses/lgpl-3.0.en.html [麻省理工学院]:https://opensource.org/licenses/MIT [提升]:http://www.boost.org/LICENSE_1_0.txt [BSD-2-条款]:https://opensource.org/licenses/BSD-2-Clause [BSD-3-Clause]:https://opensource.org/licenses/BSD-3-Clause [APACHE2]:http://www.apache.org/licenses/LICENSE-2.0 [CC0-1.0]:https://creativecommons.org/publicdomain/zero/1.0/ [MPL]:https://www.mozilla.org/en-US/MPL/2.0/ [未经许可]:https://unlicense.org/