|
4 | 4 | |---|---| |
5 | 5 | | 规范编号 | SPEC-005 | |
6 | 6 | | 标题 | 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 | |
11 | 11 | | 相关设计文档 | `.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 | |
13 | 13 | | 依据的外部规范 | 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 | |
14 | 14 |
|
15 | 15 | ## 0. 适用范围 |
@@ -126,6 +126,13 @@ mcpp 输出的 S1 文档满足 S1 等级 2,不输出 `ide.options`。等级 3 |
126 | 126 | 真的编译就能得到(§3.4)。`ide.toolchains.<id>.build-id` 给出编译器的构建标识, |
127 | 127 | 取自 mcpp 已经算出的驱动身份(工具链指纹的同一个字段),同一工具链的两次运行 |
128 | 128 | 之间保持稳定。**已实现** |
| 129 | +- **R3.8a** 一个模块名在一个程序之内标识一个模块,而一个配置可以包含多个程序。同一 |
| 130 | + 配置中两个包提供同一个模块名时(两者不在同一个包的闭包中,#732),两个单元的 |
| 131 | + `provides` 都列出这个名字;可能导入它的每个单元,其 `arguments` 带有构建所用的 |
| 132 | + 绑定:GCC 为 `-fmodule-mapper=<映射文件>`(相对 `work-directory`),Clang 为 |
| 133 | + `-fmodule-file=<名字>=<路径>`,MSVC 为 `/reference <名字>=<路径>`。只按名字在文档中 |
| 134 | + 查找提供方的消费方,因此可能取到另一个程序的模块;构建本身不受影响。每个名字只有 |
| 135 | + 一个提供方时,文档与此前逐字相同。**已实现** |
129 | 136 | - **R3.9** `ide.role` 取自扫描器读到的模块声明形式: |
130 | 137 |
|
131 | 138 | | 声明 | `ide.role` | |
@@ -233,3 +240,4 @@ mcpp 输出的 S1 文档满足 S1 等级 2,不输出 `ide.options`。等级 3 |
233 | 240 | | 1.4 | 2026-09-26 | R2.5:命令不构建宿主工具;工具库中没有的工具被推迟,输出说明 `MCPP_BUILD_DATABASE_HOST_TOOL_DEFERRED`,取代 1.3 的警告 `MCPP_BUILD_DATABASE_HOST_TOOL_UNBUILT`(#707)。 | |
234 | 241 | | 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)。 | |
235 | 242 | | 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