[mcpp]: 用 C++23 模块 + import std 开发了个构建工具,并实现自己构建自己(自举)
-
从去年 gcc 15.1 初步支持 import std 开始, 我就在 C++的模块化上做了很多实践
前段时间, 突然产生了以 C++23 模块化为基础, 实现一个现代 C++模块化项目的构建工具。并以其能用自己从源码构建出自己也就是所谓的自举来做为初步目标, 目前这个目标已经实现
欢迎对现代 C++和模块化感兴趣的朋友来用, mcpp 构建工具使用模块化特性 玩一玩或开发开发小项目 也欢迎大家来反馈和交流
开源仓库: https://github.com/mcpp-community/mcpp
mcpp
一个 现代 C++ 模块化构建工具 — 纯 C++23 模块编写,已实现自举
核心特性
- C++23 模块原生支持 —
import std自动处理,文件级增量构建,模块依赖自动分析,零手动配置 - 纯模块化自举 — mcpp 自身由 43+ 个 C++23 模块组成,用自己构建自己,模块系统经实战验证
- 开箱即用 — 一条命令安装,内置 GCC 16 / LLVM 20 工具链,自动下载到隔离沙盒,不污染系统
- 集成依赖管理 — SemVer 约束解析、锁文件、跨项目 BMI 缓存、自定义包索引
- 多包工作空间 — Workspace 统一锁文件与版本管理,适合大型项目
为什么选择 mcpp ?
mcpp 专门为 C++23 模块化开发 打造。如果你想在项目中使用
import std、模块接口单元(.cppm)、模块分区等现代 C++ 特性,mcpp 在 Linux 上能为你提供便捷且友好的开发体验:- 默认模块化 —
mcpp new创建的项目模板直接使用 C++23 模块,import std开箱即用 - 文件级增量构建 — 基于 P1689 dyndep 的三层优化(前端脏检查 + 逐文件扫描 + BMI restat ),只重编真正变化的模块
- 一键创建 & 构建 —
mcpp new hello && cd hello && mcpp build,工具链自动安装,无需手动配置编译器和构建系统 - 模块化生态 — mcpplibs 提供一系列可直接
import的 C++ 模块化库,支持自定义包索引
注: 早期版本 — mcpp 仍在积极开发中,接口和行为可能在后续版本调整。
欢迎对现代 C++ 模块化构建工具感兴趣的开发者参与贡献。
问题 / 反馈 / 想法欢迎在 issues 留言。快速开始
安装
方式一:使用 xlings 安装(推荐)
xlings install mcpp -y方式二:一键安装脚本
curl -fsSL https://github.com/mcpp-community/mcpp/releases/latest/download/install.sh | bash安装到
~/.mcpp/,自动加进 shell PATH 。删除~/.mcpp即可干净卸载。方式三:让 AI 助手帮你安装
将以下提示词复制给你的 AI 编码助手( Claude Code / Cursor / Copilot 等):
阅读 https://github.com/mcpp-community/mcpp 的 README , 帮我安装 mcpp 并创建一个 C++23 模块项目,构建并运行。 项目的 .agents/skills/mcpp-usage/SKILL.md 有详细的使用指南。创建项目 & 构建运行
mcpp new hello cd hello mcpp build mcpp run注:首次构建会初始化环境并获取工具链,可能需要一些时间。
项目结构
hello/ ├── mcpp.toml ← 工程描述 └── src/ └── main.cpp ← import std; 直接可用# mcpp.toml [package] name = "hello" [targets.hello] kind = "bin" main = "src/main.cpp"使用模块化库
在
mcpp.toml中添加两行依赖,即可引用 mcpplibs 社区模块化库:[dependencies] cmdline = "0.0.2"然后在代码中直接
import:import mcpplibs.cmdline;更多依赖配置方式(版本约束、命名空间、Git 引用、本地路径等)参见 mcpp.toml 指南 — 依赖管理。
平台支持
OS / arch GCC (glibc) GCC (musl) Clang / LLVM MSVC Linux x86_64 
默认
— Linux aarch64 


— macOS — — 
— Windows — — 

已支持 |
计划中默认:release 二进制走 musl 全静态,Linux x86_64 可直接运行,无 glibc 依赖。
文档
任意命令的完整选项可通过
mcpp <cmd> --help查阅。AI 辅助学习:你可以将以下提示词发给 AI 编码助手,让它帮你快速了解 mcpp:
阅读 https://github.com/mcpp-community/mcpp 仓库的 .agents/skills/mcpp-usage/SKILL.md 和 docs/ 目录下的文档, 告诉我如何用 mcpp 创建一个带依赖的 C++23 模块项目。参与贡献
欢迎通过 Issue 和 PR 参与项目开发。项目接受开发者使用 AI Agent 参与开发与贡献。
基本流程
- 创建 Issue — Bug 修复、新功能、优化等,先在 issues 创建讨论
- 实现改动 — Fork 仓库,创建分支,实现并验证(
mcpp build+ E2E 测试) - 提交 PR — 使用
gh pr create,确保 CI 通过 - CI 必须通过 — CI 不通过的 PR 不会被合入
提交信息规范:
feat:/fix:/test:/docs:/refactor:前缀AI Agent 贡献:项目的
.agents/skills/mcpp-contributing/SKILL.md提供了完整的 Agent 贡献流程和项目结构说明。将以下提示词发给 AI 助手即可:阅读 https://github.com/mcpp-community/mcpp 仓库的 .agents/skills/mcpp-contributing/SKILL.md , 按照指南帮我给 mcpp 项目提交一个贡献。社区 & 生态
- 社区论坛 — 交流群 (Q: 1067245099)
- mcpp-index — 默认包索引
- mcpplibs — 模块化 C++ 库集合
致谢
项目依赖和灵感来源:
- xlings — 工具链 / 包管理底座
- mcpplibs.cmdline — CLI 框架
- ninja — 底层构建引擎
- xmake — 跨平台构建工具
- cargo — Rust 包管理器
- C++23 模块原生支持 —