以模块为先的现代 C++ 构建工具。mcpp 完全由 C++23 模块写成,并已实现自举。
English | 简体中文
| 文档 · 快速开始 · mcpp.toml 指南 · 示例项目 · 工具链管理 |
|---|
| 包索引 mcpp-index · 模块化库 mcpplibs · 社区论坛 · Issues · Releases |
| 支持的插件 · mcpp-language-server(mcppls) —— C++20/23 模块语言服务器,面向 VS Code、Zed、CLion、Neovim、AI Agent(MCP)与 CI |
- 模块化构建系统:以 C++ 模块为先。
import std自动处理,文件级增量构建,模块依赖自动分析,无需配置 - 构建插件与异构硬件:
build.mcpp与规则包扩展构建;CUDA、HIP、SYCL、Vulkan/SPIR-V 与 Ascend C 各对应一个规则包 - 包管理与模块化库生态:SemVer 约束、锁文件、跨项目 BMI 缓存、自定义索引;mcpplibs 中的库在
mcpp.toml中加两行即可import - 工具链管理与交叉编译:
family@version按需安装;--target把同一次构建切换到 Windows、macOS、Cortex-M 或 RISC-V 裸机,一份源码经 openkal 可构建到多个带操作系统的目标 - 环境与运行时:由 xlings 提供用户态环境。工具链与依赖留在隔离的沙盒中,runner 把产物送到开发板或模拟器上运行
- 纯模块化自举:mcpp 完全由 C++23 模块接口单元写成,并由它自己构建
mcpp 专为 C++23 模块化开发设计。需要使用 import std、模块接口单元(.cppm)、模块分区等现代 C++ 特性的项目,在 Linux、macOS ARM64 与 Windows x86_64 上都能得到顺畅、友好的开发体验。
C++ 通常把下面五项工作交给五个工具,mcpp 用一个命令完成全部五项。第二行列出每一列通常对应的工具。
| mcpp | 构建系统 | 构建插件 | 包管理 | 工具链管理 | 环境与运行时 |
|---|---|---|---|---|---|
| 最接近的工具 | CMake + Ninja | CMake modules、xmake rules | vcpkg、Conan | rustup、nvm | conda、Nix |
使用 xlings 安装(推荐)
xlings install mcpp -y尚未安装 xlings:点击查看安装命令
Linux / macOS
curl -fsSL https://d2learn.org/xlings-install.sh | bashWindows — PowerShell
irm https://d2learn.org/xlings-install.ps1.txt | iexxlings 的更多信息见 xlings.d2learn.org
可选:短命令(mp、mbuild、mrun 等)
xlings install mcpp-short-cmd -y该包注册 30 个 shim,mcpp build 即可写成 mbuild。命名规则:除最后一个词外,每个词取首字母,最后一个词保留全拼,例如 mcpp self doctor → msdoctor。mp 即不带子命令的 mcpp。这些短命令指向 mcpp 这个 shim,而不是某个固定的二进制,因此 xlings use mcpp <ver> 会同时切换它们。
| 短命令 | 展开 | 短命令 | 展开 |
|---|---|---|---|
mp |
mcpp |
mexpkg |
mcpp emit xpkg |
mnew |
mcpp new |
mxparse |
mcpp xpkg parse |
mbuild |
mcpp build |
mtinstall |
mcpp toolchain install |
mrun |
mcpp run |
mtlist |
mcpp toolchain list |
mtest |
mcpp test |
mtdefault |
mcpp toolchain default |
mclean |
mcpp clean |
mcdir |
mcpp cache dir |
madd |
mcpp add |
mclist |
mcpp cache list |
mremove |
mcpp remove |
mcinfo |
mcpp cache info |
mupdate |
mcpp update |
mcgc |
mcpp cache gc |
msearch |
mcpp search |
milist |
mcpp index list |
mpublish |
mcpp publish |
miadd |
mcpp index add |
mpack |
mcpp pack |
miremove |
mcpp index remove |
msdoctor |
mcpp self doctor |
miupdate |
mcpp index update |
msenv |
mcpp self env |
msconfig |
mcpp self config |
msversion |
mcpp self version |
msexplain |
mcpp self explain |
其他安装方式
方式 1:一键安装脚本(Linux x86_64/aarch64、macOS ARM64)
curl -fsSL https://github.com/mcpp-community/mcpp/releases/latest/download/install.sh | bash该脚本不支持 Windows,Windows 请使用上文 PowerShell 的 xlings 安装方式。脚本安装到 ~/.mcpp/,并把它加入 shell 的 PATH。删除 ~/.mcpp 即完成卸载。
方式 2:Homebrew(macOS / Linux)
brew install mcpp-community/mcpp/mcpp-m这一条命令会 tap mcpp-community/homebrew-mcpp,并安装同一份预编译的 release 二进制。macOS 要求 Apple 芯片与 macOS 14;每个用户的数据仍在各自的 ~/.mcpp/ 中。
Homebrew 中的 mcpp 是一个无关的 C 预处理器,因此 formula 名为 mcpp-m,安装出的命令仍是 mcpp。
Homebrew 6 对第三方 tap 设置了信任门。 上面的全限定命令被视为显式意图,可以直接使用;其他写法,包括短名 brew install mcpp-m、mcpp 别名以及之后的升级,都会被拒绝:
Refusing to load formula mcpp-community/mcpp/mcpp-m from untrusted tap
mcpp-community/mcpp.
信任该 tap 一次之后,上述写法均可使用:
brew trust mcpp-community/mcpp方式 3:Arch Linux(AUR)
yay -S mcpp-bin # 预编译 release 二进制
yay -S mcpp-m # 或源码构建(用 mcpp-bin 自举)mcpp 命令安装到系统级位置,每个用户的数据仍在各自的 ~/.mcpp/ 中。Arch 上 mcpp 这个名字属于一个无关的 C 预处理器,因此包名为 mcpp-bin / mcpp-m(见 tools/aur/)。稳定版 release 的自动同步只管理 mcpp-bin;mcpp-m 与 mcpp-git 仍由人工维护,版本可能有意滞后。
方式 4:pip(PyPI)
pip install mcpp-binmcpp 命令安装到当前的 Python 环境中;使用 pipx install mcpp-bin 则为它单独创建一个环境。wheel 中是同一份预编译 release 二进制,支持 Linux x86_64 / aarch64、Apple 芯片上的 macOS 14+ 与 Windows x86_64。每个用户的数据仍在各自的 ~/.mcpp/ 中,不在 Python 环境内。PyPI 上 mcpp 这个名字属于一个无关的项目,因此包名为 mcpp-bin(见 tools/pypi/)。
方式 5:由 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; 直接可用
└── tests/
└── test_smoke.cpp ← `mcpp test` 自动发现
# mcpp.toml
[package]
name = "hello"
version = "0.1.0"
description = "A modular C++23 package"
license = "Apache-2.0"内置脚手架依赖约定,不生成 [targets.hello]:mcpp 由 src/main.cpp 推断出 binary target,mcpp test 自动发现 tests/test_smoke.cpp。
在 mcpp.toml 中添加两行依赖,即可引入 mcpplibs 社区的模块化库:
[dependencies]
cmdline = "0.0.2"然后在代码中直接 import:
import mcpplibs.cmdline;其他依赖写法(版本约束、命名空间、Git 引用、本地路径等)见 mcpp.toml 指南 —— 依赖管理。
构建系统
- 原生支持 C++20/23/26 模块(接口单元、实现单元、模块分区),另有
c++latest/c++fly两种实验模式 import std/import std.compat全自动预编译与缓存- 三层增量优化:前端脏检查 + 逐文件 P1689 dyndep + BMI copy-if-different restat
- 带指纹的 BMI 缓存:按编译器、编译标志与标准库计算哈希,跨项目共享
- Ninja 后端:自动生成 build.ninja,并行编译
- 自动生成
compile_commands.json(可直接供 clangd / ccls 使用);mcpp build --configure-only可在编译普通源码之前刷新它 - C 语言一等支持:自动识别
.c文件,支持 C/C++ 混合项目 - 用户自定义 cflags / cxxflags / ldflags / c_standard
工具链管理
- 内置 GCC 16.1.0 与 LLVM/Clang 20.1.7,一条命令安装
- 按宿主选择默认值:Linux x86_64 使用原生 glibc GCC,其他 Linux 架构使用 musl GCC,macOS 以及有可用 MSVC 的 Windows 使用 LLVM,裸 Windows 使用 MinGW-w64 GCC
- 多版本共存:
mcpp toolchain install gcc 16/mcpp toolchain install llvm 20 - 隔离沙盒:所有工具链位于
~/.mcpp/registry/,不改动系统 - 按平台指定:
linux = "gcc@16"、macos = "llvm@20" - GCC 与 Clang 的编译管线对等(由
BmiTraits抽象层驱动)
交叉编译、裸机与设备
mcpp build --target <triple>:一个选项;该目标所需的工具链 payload 自动解析并安装- 目标从
x86_64-linux-gnu覆盖到 Cortex-M、Cortex-A 与 RISC-V 裸机,完整列表见平台支持 - freestanding 目标不带操作系统:C 库、启动代码、内存布局与模拟器由板级支持包提供,而不由 mcpp 提供
- runner 用于运行构建机上无法运行的产物:
mcpp run --runner flash、--list-runners、mcpp why runners mcpp new --template riscv-virt-rt:按名字实例化某个包自带的板级模板- 基于 openkal 的交叉编译:一个可移植程序,可以为内核接口与 C 库均由包提供的目标构建
异构构建与加速器
[build] accel = "cuda12.9+{sm_89}, vulkan1.2":一次构建可以指定一个或多个设备后端,该构建中cfg(accelerator = "cuda")为真- 目前有规则包的编程模型共五个:CUDA、HIP、SYCL、Vulkan/SPIR-V 与 Ascend C
- 设备翻译单元由各自的编译器编译,产物进入普通链接;主机与设备之间的边界代码由 mcpp 生成,不需要写两遍
- 用带约束的 glob 选择设备源码:
{ glob = "src/kernels/**/*.cu", accel = "cuda12.9+{sm_89}" } - 引擎中不包含任何厂商名,因此第六个后端是一个包,而不是一次引擎改动
包管理与依赖
- SemVer 约束解析:
^、~、范围、精确版本 - 三级解析:约束合并 → 多版本 mangling 回退 → 精确匹配
- 锁文件 mcpp.lock(v2 格式:索引快照 + 命名空间)
- 命名空间:
[dependencies.myteam] foo = "1.0" - 自定义包索引:
[indices] acme = "git@..."/{ path = "..." } - 项目级索引隔离(
.mcpp/目录,不影响全局状态) - 依赖来源:索引 / Git / 本地路径
工作空间
[workspace] members = ["libs/*", "apps/*"]- 统一的锁文件与 target 目录
- 版本集中管理:
[workspace.dependencies]+.workspace = true - 选择性构建:
mcpp build -p member-name - 配置继承:工具链、构建标志与索引从根级联到各成员
打包与发布
mcpp pack:四种 Linux 发布模式,即 system / vendored(默认)/ self-contained / static;bundle-project与bundle-all保留为兼容别名- musl 全静态二进制:单文件分发,不依赖 glibc(目标须为对应架构的 Linux x86_64 或 aarch64)
mcpp publish:生成 xpkg.lua 并发布到包索引- 通过 patchelf 自动修正 RPATH(Linux)
扩展构建
build.mcpp:为 mcpp 没有现成规则的构建步骤编写的构建程序,它与 mcpp 通过一套带版本号的指令协议通信,而不是由 mcpp 猜测其行为mcpp::action以显式的输入与输出声明一项工作,生成的文件因此进入增量构建图,而不是游离在图外- 规则包把这类步骤提供给其他项目:包声明一个 rule 模块,使用方以 feature 的形式选用它
- payload、运行时适配包与板级支持包都是普通的包:工具、驱动或开发板,都由安装库的同一个解析器安装
开发体验
mcpp new:创建模块化项目;--template [ns.]name[@version][:tname]与mcpp add使用同一种精确身份写法,选用包自带的模板。包中只有一个模板时,即使未写default = true,它也是默认模板;存在歧义时用--list-templates [ns.]name[@version]列出可选模板mcpp run [-- args]:构建并运行mcpp test [pattern] [-- args]:自动发现并运行测试(按名字过滤;--list、--timeout <s>、--message-format json)mcpp search:搜索包索引mcpp add / remove / update:依赖管理- 命令行上的 profile 与 feature:
build与run接受--release/--profile <name>,build、run与test接受--features <list> mcpp why [toolchain|runtime|deps|runners]:解释已解析的构建决策;--format json供程序读取mcpp emit sbom:为刚记录的那次解析生成 CycloneDX 格式的物料清单(SBOM)mcpp --offline/MCPP_OFFLINE=1:只使用本地已有的状态mcpp explain E0001:错误码的详细解释mcpp self doctor:环境自诊断
测量对象是构建 mcpp 自身:锁定的工作负载有 137 个模块接口单元、57k 行代码,每个单元都 import std;。四个构建引擎使用同一个编译器二进制。每格数据是 3 次采样的中位数,以及相对 cmake 的倍率。所有列来自同一次运行。
| 场景 | mcpp |
mcpp +优化 |
mcpp (旧版) |
cmake |
xmake |
|---|---|---|---|---|---|
cold |
86.69s · 1.1x | 35.73s · 2.6x | 86.75s · 1.1x | 91.74s · 1.0x | 90.54s · 1.0x |
noop |
0.16s · 2.0x | 0.18s · 1.8x | 0.24s · 1.3x | 0.32s · 1.0x | 0.38s · 0.8x |
touch-hub |
0.42s · 197.7x | 0.42s · 197.2x | 81.72s · 1.0x | 83.21s · 1.0x | 82.48s · 1.0x |
edit-body |
80.87s · 1.1x | 29.83s · 2.9x | 81.19s · 1.1x | 85.30s · 1.0x | 84.33s · 1.0x |
edit-comment |
0.40s · 207.0x | 0.40s · 207.0x | 79.11s · 1.1x | 83.21s · 1.0x | 82.15s · 1.0x |
cold 尚未构建过 · noop 没有任何改动 · touch-hub 只更新 mtime,内容不变 · edit-body 在函数体内做一次真实修改 · edit-comment 在 hub 接口中添加一行注释。
mcpp = mcpp@2026.8.13.1,即被测版本 · mcpp +优化 = 与 mcpp 同一个二进制,开启 opt-in 的 [build] bmi_schedule = "on"(默认关闭)· mcpp (旧版) = mcpp@2026.8.11.3,即上一个已发布版本。
Linux x86_64 · i9-13900K · gcc 16.1.0 · n=3 · 锁定的工作负载 a749e9f ·
cmake 4.4.2 / xmake 3.1.0 · 所有大于 1s 的中位数,其 min/max 与中位数相差不超过 4% ·
数据:standard-20260814-linux-x86_64。
touch-hub与edit-comment两行的差异来自级联抑制。 cmake 与 xmake 按时间戳判断,重新编译全部下游单元;mcpp 把编译器刚产出的 BMI 与上一份比较,接口未变时跳过级联。这是默认行为,不需要配置。mcpp (旧版)一列测得上一个发布版为 81.72s,与 cmake 处于同一量级,因此这一效果是本版本新增的。edit-body是对照行,mcpp 在这一行有意不快。 扰动在接口单元中插入一条语句,GCC 记录的源码位置随之移动,BMI 因此改变,每个导入者都需要重新构建。在这一行上快的引擎,是跳过了本应完成的工作。一次修改是否引起级联,取决于函数体写在哪里:原地等长的修改,或写在独立.cpp中的函数体,都不引起级联,结果落在约 200x 的那一档。实测见.agents/docs/2026-08-15-module-edit-granularity.md。bmi_schedule为 opt-in,默认关闭(auto解析为 off)。 它把代码生成移出关键路径,因此只在确实需要级联时才有收益:cold86.69s → 35.73s,edit-body80.87s → 29.83s;在 mcpp 本已跳过级联的两行上没有收益。调度出错时的表现是静默失效而不是报错,因此默认值不会依据单台机器的数据改变。
方法、锁定的版本与完整数据 → bench/README.zh-CN.md ·
English
mcpp 的身份模型有两条正交的轴:工具链是 family@version(family ∈ gcc | llvm | msvc),目标是三段式 triple arch-os[-env]。交叉编译只需 mcpp build --target <triple>,对应的工具链 payload 会自动解析并安装。mcpp toolchain list 显示本机的实时状态。
宿主(mcpp 本身运行的平台):Linux x86_64 / aarch64、macOS arm64、Windows x86_64。
目标(--target 接受的值;表中的行及其档位取自 modules/toolchain-model/src/triple.cppm,mcpp toolchain list 为本机报告的也是这一份):
| Target | 约定工具链 | 档位 |
|---|---|---|
x86_64-linux-gnu |
gcc(Linux 默认)或 llvm | verified |
x86_64-linux-musl |
gcc 16,全静态 | verified |
aarch64-linux-musl |
gcc 16,全静态;从 x86_64 交叉编译(qemu)或原生构建 | verified |
x86_64-windows-gnu |
gcc 16 MinGW-w64;Windows 上原生构建,Linux 上交叉编译(wine)(无 Visual Studio 时的 Windows 默认) | verified |
x86_64-windows-msvc |
msvc@system(探测 VS/BuildTools)或 llvm ¹(有 Visual Studio 时的 Windows 默认) |
verified |
x86_64-windows-musl |
llvm 22;带 musl C 库的 PE,gcc 无法产出;系统部分由依赖图提供 | preview |
aarch64-macos |
llvm(macOS 默认) | verified |
riscv64-none-elf · riscv32-none-elf |
llvm 22;裸机,xim:picolibc-riscv ² |
verified |
thumbv6m-none-eabi · thumbv7m-none-eabi |
llvm 22;Cortex-M0/M0+/M1、Cortex-M3 ² | verified |
thumbv7em-none-eabihf · thumbv8m.main-none-eabi |
llvm 22;Cortex-M4F/M7F 硬浮点,Cortex-M33/M55 软浮点 ² | verified |
armv7a-none-eabi · armv7a-none-eabihf |
llvm 22;Cortex-A 32 位,第一个带 MMU 的目标 ² | verified |
aarch64-none-elf · x86_64-none-elf |
llvm 22;裸机,默认不带 C 库 ² | preview |
thumbv7em-none-eabi · thumbv8m.base-none-eabi · thumbv8m.main-none-eabihf |
llvm 22;Cortex-M4/M7 软浮点、M23、M33F/M55F ² | preview |
riscv64-linux-musl · aarch64-linux-gnu · x86_64-macos |
— | planned |
wasm32-emscripten |
emsdk@6.0.9;Emscripten 自带 sysroot 与 libc++ 模块接口;mcpp run 使用 payload 声明的 node(xim:node)运行模块,不使用 PATH 上的 node |
verified |
x86_64-linux-android |
android-ndk@30.0.16248370;bionic 来自 NDK,一个 payload 服务两个 ABI;已在 API 24 的 x86_64 模拟器镜像上运行 |
verified |
aarch64-linux-android |
同一个 payload、同样的构建;已在 qemu-user 上配合系统镜像自带的 bionic 运行,平台模拟器无法在 x86_64 宿主上做到这一点 | verified |
aarch64-ios-sim |
llvm 22 加上本机的 iPhoneSimulator SDK(mcpp 定位该 SDK,不安装它);已通过 simctl-run 在模拟器上运行 ³ |
verified |
aarch64-ios |
真机采用同样的分工;产物标记为 iOS 平台,在设备上运行需要开发者自己的签名 ³ | preview |
x86_64-ios-sim |
同一次构建;尚未运行过,因为模拟器运行宿主的架构,而测量所用的机器是 Apple 芯片 ³ | preview |
verified:该行的镜像已构建并运行过,qemu 与 wine 均计入 · preview:可以构建和链接,尚无模拟器运行记录 · planned:已在词表中登记,尚未接通。针对这类目标的构建会被拒绝,而不会被尝试。
Linux release 二进制是 x86_64 与 aarch64 的 musl 全静态构建(
x86_64-linux-musl与aarch64-linux-musl)。 旧写法(x86_64-w64-mingw32、gcc@16.1.0-musl、mingw-cross@…、musl-gcc@…)作为别名永久接受,并归一化为上表中的规范形式。¹ Windows 上 llvm 使用 MSVC ABI,因此需要已安装的 MSVC BuildTools 或 Visual Studio(UCRT、Windows SDK、MSVC STL)。这一点无需手动处理:mcpp 首次运行时探测是否有可用的 MSVC,探测不到就默认使用
x86_64-windows-gnu(winlibs MinGW-w64)。该工具链完全自包含,不需要 Visual Studio,并支持import std。在未做任何配置的 Windows 上,mcpp new && mcpp build可直接使用。mcpp.toml中显式写出的[toolchain]始终按原样生效:mcpp 只修正它自己选择的默认值,不改动用户的设置。² 裸机各行不带操作系统。clang 与 lld 本身就是交叉编译器,因此任何能安装 LLVM payload 的宿主都能产出这些目标。C 库、启动代码、内存布局与模拟器由板级支持包提供,而不由 mcpp 提供,见 40 —— 裸机与 freestanding 目标。
³ 三个 iOS 目标需要 macOS 宿主,编译器仍来自生态:
xim:llvm能为 iOS 部署目标产出 arm64 Mach-O。本机提供的是 SDK。SDK 位于 Xcode 中且不可再分发,因此 mcpp 通过xcrun定位它,方式与定位 macOS SDK 相同;找不到时,mcpp 报出该 SDK 的名字并拒绝构建。模拟器会话由xim:apple-simulator-tools提供。见 20 —— 工具链管理。
docs/zh/ 是使用手册。章节号的第一位数字表示它所属的部分;索引另附一份反查表,可以从一个 manifest 键或一条命令查到负责它的章节。
| 部分 | 入口章节 |
|---|---|
0x 基础 |
01 快速开始 · 04 mcpp.toml 工程文件指南 · 09 按场景选命令 |
1x 发布 |
10 发布打包 · 11 发布一个库到 mcpp-index · 12 分发预编译库 |
2x 工具链与目标 |
20 工具链管理 · 21 目标三元组 · 24 基于 openkal 的交叉构建 |
3x 扩展 mcpp |
30 构建程序:build.mcpp · 31 编写规则包 · 34 编写板级支持包 |
4x 设备与加速器 |
40 裸机与 freestanding 目标 · 41 在设备上运行 · 42 异构硬件构建 |
5x 面向程序的契约 |
50 机器可读输出 · 51 受支持的版本与兼容性 · 规范 |
9x mcpp 自身 |
90 从源码构建与参与贡献 · 92 发布 mcpp |
examples/ 下的每个目录都是一个可以构建的项目,03 —— 示例项目 说明每个示例演示什么。任意命令的完整选项可通过 mcpp <cmd> --help 查看。
AI 辅助学习:将以下提示词发给 AI 编码助手,可以快速了解 mcpp:
阅读 https://github.com/mcpp-community/mcpp 仓库的
.agents/skills/mcpp-usage/SKILL.md 和 docs/ 目录下的文档,
说明如何用 mcpp 创建一个带依赖的 C++23 模块项目。
以下是用 mcpp 构建的实际项目,包括可直接 import 的 C++23 模块,以及 mcpp 所依赖的工具链底座:
| 项目 | 说明 |
|---|---|
| mcpp | mcpp 自身,由 C++23 模块写成,完全自举 |
| xlings | mcpp 所依赖的工具链与包管理底座 |
| tinyhttps | 极简的 C++23 HTTP/HTTPS 客户端,支持 SSE 流式传输 |
| llmapi | 现代 C++ LLM API 客户端(兼容 OpenAI) |
| imgui-m | 以 C++23 模块包形式提供的 Dear ImGui |
| cmdline | 命令行解析库 / 框架(mcpp 自身使用) |
更多模块化库见 mcpplibs · 包索引见 mcpp-index
欢迎通过 Issue 与 PR 参与开发。项目接受借助 AI Agent 完成的贡献。
基本流程
- 创建 Issue:Bug 修复、新功能或改进,先在 issues 中发起讨论
- 实现改动:Fork 仓库并创建分支,按改动范围验证(行为改动运行
mcpp build与相关测试;纯文档改动核对示例与链接) - 提交 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 项目提交一个贡献。
- 社区论坛:交流群(QQ:1067245099)
- mcpp-index:默认包索引
- mcpplibs:模块化 C++ 库集合
项目依赖与灵感来源:
- xlings:工具链 / 包管理底座
- mcpplibs.cmdline:CLI 框架
- ninja:底层构建引擎
- xmake:跨平台构建工具
- cargo:Rust 包管理器
