cmkr是什么:为什么这个能自动写CMakeLists.txt的C++构建系统值得你关注(完整项目概览)
【免费下载链接】cmkrModern build system based on CMake and TOML.项目地址: https://gitcode.com/gh_mirrors/cm/cmkr
cmkr(读作 "cmaker")是一个基于 CMake 和 TOML 的现代 C++ 构建系统:它解析一个简洁的cmake.toml文件,自动为你生成规范、可读的CMakeLists.txt。你只需要 CMake 和一套 C++ 编译器就能使用它,无需额外安装任何软件。对深受 CMake 脚本复杂语法困扰的开发者来说,这是一个"开箱即用"的免费构建工具。
为什么需要 cmkr:告别 CMake 学习曲线
写 CMake 和写 C++ 一样难,但没人真的想学 CMake——构建系统理应"直接能跑"。CMake 本身是一门图灵完备的脚本语言,大项目里它是利器,但对简单项目却显得过度复杂。
cmkr 的解法很聪明:它不取代 CMake,而是替你写 CMake。你的项目生成的CMakeLists.txt与 CMake 生态完全兼容,随时可以"脱离"cmkr 回到纯 CMake,没有任何锁定风险。
💡 官方把 cmkr 称为 "meta-meta-buildsystem",并刻意设计了三层"无缝"体验:不装新软件、改 TOML 自动重新生成、生成的 CMakeLists.txt 人类可读。更多设计思路见哲学页 docs/philosophy.md。
3行TOML代替大段CMake:上手有多简单?
这是 cmkr 最直观的魅力。一个最小项目只需要几行:
[project] name = "cmkr_for_beginners" [target.hello_world] type = "executable" sources = ["src/main.cpp"]对应的大段project()、add_executable()、target_*命令全部由 cmkr 自动生成。对比官方示例 tests/basic/cmake.toml,你会发现整个配置一目了然。
从零开始:两条命令引导(Bootstrap)
cmkr 可以"自举"——从项目目录执行引导脚本后即可使用,整个过程不改变你现有的 CMake 工作流:
- 获取
cmake/cmkr.cmake引导脚本 - 运行
cmake -P cmkr.cmake完成引导 - 修改
cmake.toml,然后照常执行cmake -B build和cmake --build build
一旦引导完成,之后每次修改cmake.toml,只需正常构建,cmkr 会自动检测并重新生成CMakeLists.txt。引导脚本仅约 250 行,方便审计;cmake.toml、生成的CMakeLists.txt和脚本本身都建议提交到版本控制。
项目结构一览:这个仓库里都有什么
整个仓库非常精简,结构清晰,方便快速理解:
| 目录/文件 | 作用 |
|---|---|
cmake.toml | 项目自己的构建配置(cmkr 吃自己的狗粮 🍝) |
src/+include/ | cmkr 核心源码:TOML 解析器与 CMake 生成器 |
cmake/cmkr.cmake | 自举脚本,负责下载并构建 cmkr 可执行文件 |
tests/ | 十几个真实场景示例:条件编译、依赖获取、vcpkg 等 |
docs/ | 官方文档:入门指南、TOML 参考、示例库 |
third_party/ | 仅 4 个 header-only 依赖,轻量透明 |
核心逻辑集中在 src/cmake_generator.cpp(TOML → CMake 生成,约 1600 行)与 src/project_parser.cpp(TOML 解析,约 900 行),源码总量仅 3000 余行,读起来毫无压力。
不只是Hello World:功能亮点
cmkr 的能力远超"写个 Hello World",以下特性都在测试目录中有完整示例:
- 🧩多目标项目:可执行文件、静态/动态库、接口库(interface),支持
subdir组织多模块 - 🔀条件编译:内置
windows、linux、msvc、clang等预定义条件,一行ptr64.sources就能按平台添加源文件(见 tests/conditions/) - 📦依赖管理:
[fetch-content]直接声明依赖,并原生支持 vcpkg 工具链(见 tests/fetch-content/ 与 tests/vcpkg/) - 🌍多语言:支持 C/C++、CUDA、Objective-C、Fortran、Swift 等十余种语言(见 docs/cmake-toml.md 参考页)
- 🎛️构建选项:
[options]声明缓存变量,可用cmake -D选项名=ON在配置期定制 - 🧹通配符与模板:源文件支持 glob 模式,还能配置文件模板替换(见 tests/globbing/、tests/templates/)
完整选项速查请看官方参考文档 docs/cmake-toml.md,示例索引见 docs/examples/index.md。
企业级友好:安全性与可复现性
对"引导 + 生成代码"的组合心存疑虑的团队,官方专门做了针对性设计(详见 docs/philosophy.md 的 Enterprise 章节):
- 零额外依赖:只需现有 CMake 与编译器,不引入任何新的供应链风险
- 可复现构建:引导脚本默认锁定 cmkr 精确版本,同一版本永远生成同一份
CMakeLists.txt - 完整性校验:可将版本标签固定为 commit hash 并做一致性检查
- CI 零开销:引导过程在 CI 环境自动跳过,cmkr 只运行在开发者机器上
命令行工具:把构建收进一个二进制
除了项目内嵌使用,你也可以把 cmkr 可执行文件加入PATH,获得一个轻量命令行工具:init(脚手架建项目)、gen(生成 CMakeLists)、build(一键配置并编译)、clean、install等,覆盖了日常 C++ 开发的高频操作(参数说明见 include/help.hpp)。
总结:谁应该关注 cmkr?
✅适合你,如果你:
- 受够了 CMake 的冗长语法,想要声明式、可读性强的构建配置
- 希望团队(包括新手)几分钟内就能正确搭建 C++ 项目
- 想要保留完整 CMake 生态兼容性,随时可平滑退出
- 企业环境关注可审计、可复现、CI 无额外开销
cmkr 证明了"生成器"路线在 C++ 构建领域的可行性:用 TOML 的简洁表达意图,用 CMake 的强大做底层,两边的好处全都要。如果你正在寻找一个简单、快速、免费的 CMakeLists.txt 自动生成方案,这个 C++ 构建系统值得现在就试试。
【免费下载链接】cmkrModern build system based on CMake and TOML.项目地址: https://gitcode.com/gh_mirrors/cm/cmkr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考