Skip to content

Commit ef6dffd

Browse files
committed
release: v0.0.2
第二个公开版本。详见 CHANGELOG.md 的 [0.0.2] 条目。 主要变化: * C 语言源文件支持(\`cflags\` / \`cxxflags\` / \`c_standard\` + ninja \`c_object\` 规则) * xpkg 风格依赖命名空间(\`[dependencies.<ns>]\` 子表 + \`mcpp add ns:name@ver\`) * \`src/pm/\` 包管理子系统骨架(dep_spec / lock_io / package_fetcher / resolver) * 新增设计文档:包索引仓配置、pm 子系统架构 向后兼容,老 mcpp.toml / mcpp.lock 零改动可用。
1 parent 1564fc3 commit ef6dffd

2 files changed

Lines changed: 65 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,70 @@
33
> 本文件追踪 `mcpp-community/mcpp` 公开仓的版本演进。
44
> 格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/)
55
6+
## [0.0.2] — 2026-05-09
7+
8+
第二个公开版本。新增 C 语言一等公民支持、xpkg 风格依赖命名空间,以及包管理子系统骨架重构。
9+
10+
### 新增
11+
12+
-**C 语言源文件支持**`mcpp.toml``[build]` 段新增 `cflags`
13+
`cxxflags``c_standard` 三个字段;ninja 后端探测 `.c` 源文件后自动派
14+
生兄弟 C 编译器(`g++ → gcc``clang++ → clang`、跨编译器前缀如
15+
`x86_64-linux-musl-gcc` 同样适用),发出独立的 `c_object` 规则。
16+
按文件扩展名分发:`.cppm → cxx_module``.c → c_object`、其它 →
17+
`cxx_object`;dyndep / 模块扫描自动跳过 `.c`**实测可直接编译
18+
mbedtls 3.6.1 全部 108 个 `.c` 源文件**(SHA-256 测试向量与 FIPS
19+
180-4 一致)。
20+
21+
-**xpkg 风格依赖命名空间**`mcpp.toml` 现在原生支持三种依赖书写形式:
22+
- 平铺默认命名空间:`gtest = "1.15.2"``(mcpp, gtest)`,无引号
23+
- TOML 子表命名空间:`[dependencies.mcpplibs] cmdline = "0.0.2"`
24+
`(mcpplibs, cmdline)`,无引号
25+
- 老式带点字符串(向后兼容):`"mcpplibs.cmdline" = "0.0.2"` 仍能解析
26+
- CLI 同步:`mcpp add mcpplibs:cmdline@0.0.2` 接受 `<ns>:<name>`
27+
冒号分隔形式,写出仍是子表写法
28+
- 解析层在 `DependencySpec` 增加 `namespace_` + `shortName` 结构化
29+
字段,fetcher / lockfile / cache 等下层逻辑沿用现有完全限定 key。
30+
31+
### 改进
32+
33+
- 🛠 **`src/pm/` 包管理子系统(7 步重构,全部完成)** — 包管理相关代码
34+
`cli.cppm`(3510→2900 行) / `manifest.cppm` / `lockfile.cppm` /
35+
`fetcher.cppm` / `publish/xpkg_emit.cppm` 中抽出,集中到独立的
36+
`src/pm/` 目录下,跟 `build/` / `toolchain/` / `pack/` 平级。
37+
最终 8 个内部模块:
38+
- `pm/pm.cppm`(子系统门面,re-export 数据类型)
39+
- `pm/dep_spec.cppm``DependencySpec` + `kDefaultNamespace`
40+
- `pm/index_spec.cppm` — 占位,等索引仓配置实现
41+
- `pm/lock_io.cppm``mcpp.lock` IO
42+
- `pm/package_fetcher.cppm` — xlings NDJSON 客户端
43+
- `pm/resolver.cppm``resolve_semver` + `is_version_constraint`
44+
- `pm/commands.cppm``cmd_add` / `cmd_remove` / `cmd_update`
45+
- `pm/publisher.cppm``emit_xpkg` + tarball / sha256 / release helpers
46+
47+
整个重构严格保持**零行为变更**:每一步独立 PR、独立 CI 通过、独立可
48+
回滚;旧模块名(`mcpp.lockfile` / `mcpp.fetcher` / `mcpp.publish.xpkg_emit`)
49+
保留薄 shim 透传到新模块,所有调用点零改动。规划与依赖图见
50+
`.agents/docs/2026-05-08-pm-subsystem-architecture.md` §3-§5。
51+
- 📄 **新增设计文档** `.agents/docs/`:
52+
- `2026-05-08-package-index-config.md` — 多源包索引仓配置 +
53+
`mcpp.lock` 索引 commit 锁定 + 两层不可变性
54+
(L1 publish policy + L2 lock mechanism)
55+
- `2026-05-08-pm-subsystem-architecture.md` — 包管理子系统目标布局
56+
与 7 步落地计划
57+
58+
### 修复
59+
60+
- 🐛 path 依赖的 `[package].name` 比对支持 xpkg 标准 `name` + 旧式
61+
`<ns>.<name>` 复合名两种形式,兼容当前 mcpp-index 描述符尚未迁移的
62+
状态。
63+
64+
### 兼容性
65+
66+
向后兼容。老的 `mcpp.toml` / `mcpp.lock` 不需要任何改动即可在 0.0.2 下
67+
继续工作。带引号的 `"ns.name"` 形式继续被解析,只是新写出的 `mcpp add`
68+
会用无引号的子表形式。
69+
670
## [0.0.1] — 2026-05-07
771

872
mcpp 首个公开发版本。

mcpp.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mcpp"
3-
version = "0.0.1"
3+
version = "0.0.2"
44
description = "Modern C++ build & package management tool"
55
license = "Apache-2.0"
66
authors = ["mcpp-community"]

0 commit comments

Comments
 (0)