Skip to content

Commit 77c1f5f

Browse files
committed
docs(spec): SPEC-005 v1.7, R3.8a: two providers of one module name in one configuration
When two packages of one configuration provide a module name, both units list it, and a unit that may import it carries the binding the build uses in its arguments; a consumer that looks providers up by name may take the other program's module. With one provider per name the document is unchanged (#732).
1 parent 101f6b8 commit 77c1f5f

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

‎docs/specs/build-database.md‎

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
|---|---|
55
| 规范编号 | SPEC-005 |
66
| 标题 | mcpp 输出的构建数据库:内容、取值规则与不写工程目录的保证 |
7-
| 状态 | 评审中 v1.6 |
8-
| 版本 | 1.6 |
9-
| 最后修改 | 2026-09-29 |
10-
| 对应实现 | mcpp >= 2026.9.15.1;v1.3 修改的 R2.5、R3.7、R3.8、R4.1、R5.2 为 mcpp >= 2026.9.26.2;v1.4 修改的 R2.5 为 mcpp >= 2026.9.27.1;v1.5 修改的 R3.7、R3.12、R5.1、R5.2 为 mcpp >= 2026.9.28.1;v1.6 修改的 R2.1、R3.3、R3.4、R3.5、R4.1、R5.2 为 mcpp >= 2026.9.29.5 |
7+
| 状态 | 评审中 v1.7 |
8+
| 版本 | 1.7 |
9+
| 最后修改 | 2026-09-30 |
10+
| 对应实现 | mcpp >= 2026.9.15.1;v1.3 修改的 R2.5、R3.7、R3.8、R4.1、R5.2 为 mcpp >= 2026.9.26.2;v1.4 修改的 R2.5 为 mcpp >= 2026.9.27.1;v1.5 修改的 R3.7、R3.12、R5.1、R5.2 为 mcpp >= 2026.9.28.1;v1.6 修改的 R2.1、R3.3、R3.4、R3.5、R4.1、R5.2 为 mcpp >= 2026.9.29.5;v1.7 新增的 R3.8a 为 mcpp >= 2026.9.30.2 |
1111
| 相关设计文档 | `.agents/docs/2026-09-14-636-build-database-and-the-latest-xlings.md`<br>`.agents/docs/2026-09-26-compile-database-and-issue-699-design.md` |
12-
| 相关 issue | #636, #648, #655, #699, #702, #707 |
12+
| 相关 issue | #636, #648, #655, #699, #702, #707, #732 |
1313
| 依据的外部规范 | S1「C++ Build Database: IDE Profile」profile 0.3.0(§7.2 的 `generated`,Sunrisepeak/mcpp-language-server#28;此前为 0.2.0)与 S2 0.2.0 §3.4,取自 https://github.com/Sunrisepeak/lsp-mcpp-private 提交 `b82859d`(schema 自提交 `28ecd6e` 起未变);S2 0.3.0 §3.4 的部分回答(S2-3.4-12、S2-3.4-13,Sunrisepeak/mcpp-language-server#25);JSON Compilation Database |
1414

1515
## 0. 适用范围
@@ -126,6 +126,13 @@ mcpp 输出的 S1 文档满足 S1 等级 2,不输出 `ide.options`。等级 3
126126
真的编译就能得到(§3.4)。`ide.toolchains.<id>.build-id` 给出编译器的构建标识,
127127
取自 mcpp 已经算出的驱动身份(工具链指纹的同一个字段),同一工具链的两次运行
128128
之间保持稳定。**已实现**
129+
- **R3.8a** 一个模块名在一个程序之内标识一个模块,而一个配置可以包含多个程序。同一
130+
配置中两个包提供同一个模块名时(两者不在同一个包的闭包中,#732),两个单元的
131+
`provides` 都列出这个名字;可能导入它的每个单元,其 `arguments` 带有构建所用的
132+
绑定:GCC 为 `-fmodule-mapper=<映射文件>`(相对 `work-directory`),Clang 为
133+
`-fmodule-file=<名字>=<路径>`,MSVC 为 `/reference <名字>=<路径>`。只按名字在文档中
134+
查找提供方的消费方,因此可能取到另一个程序的模块;构建本身不受影响。每个名字只有
135+
一个提供方时,文档与此前逐字相同。**已实现**
129136
- **R3.9** `ide.role` 取自扫描器读到的模块声明形式:
130137

131138
| 声明 | `ide.role` |
@@ -233,3 +240,4 @@ mcpp 输出的 S1 文档满足 S1 等级 2,不输出 `ide.options`。等级 3
233240
| 1.4 | 2026-09-26 | R2.5:命令不构建宿主工具;工具库中没有的工具被推迟,输出说明 `MCPP_BUILD_DATABASE_HOST_TOOL_DEFERRED`,取代 1.3 的警告 `MCPP_BUILD_DATABASE_HOST_TOOL_UNBUILT`(#707)。 |
234241
| 1.5 | 2026-09-28 | R3.7:规则声明的设备源不是编译单元,不进入 S1 与 `compile_commands.json`(#724)。新增 R3.12:集合的 `ide.generated` 列出规则生成的文件与目录,给出构建写入的路径与生成它的步骤,S1 0.3.0(#724,Sunrisepeak/mcpp-language-server#28)。R5.1:S1 版本为 0.3.0。R5.2:以构建程序的指令为前提的检查不对其构建程序已失败的包运行,失败路径保留已记录的说明(#724)。 |
235242
| 1.6 | 2026-09-29 | 工作区按配置规划,与 `mcpp build` 相同(R2.1、R3.3、R3.4、R5.2):成员共用的包在一个配置中只描述一次;集合名的前缀由 `<成员>/` 改为只在文档描述多个配置时出现的 `<配置>/`;一个配置的规划失败时逐成员规划。R3.5:被选成员的集合按其目标给出 `ide.kind`。R4.1:同一文件与输出一条条目。 |
243+
| 1.7 | 2026-09-30 | 新增 R3.8a:同一配置中两个包提供同一个模块名时,两个单元都列出它,可能导入它的单元的 `arguments` 带有构建所用的绑定(#732)。 |

0 commit comments

Comments
 (0)