Releases: Iviesever/msvc-quick-build
Release list
v5.3.1
What's Changed
- release: close v5.3.0 provenance and govern main by @Iviesever in #133
Full Changelog: v5.3.0...v5.3.1
v5.3.0
What's Changed
- docs: align bilingual documentation and improve project entry points by @Iviesever in #126
- test: add reproducible build-system comparison harness by @Iviesever in #127
- perf: isolate benchmarks and optimize invocation warm path by @Iviesever in #128
- perf: reduce cold-build toolchain discovery overhead by @Iviesever in #131
- perf: skip stale PCH consumer validation by @Iviesever in #132
Full Changelog: v5.2.0...v5.3.0
v5.2.0
更新内容
- feat(installer): 改进脚本并加速原生 CI,由 @Iviesever 提交于 #63
- ci: 共享原生测试产品编译,由 @Iviesever 提交于 #64
- ci: 平衡原生测试分片(shard)开销,由 @Iviesever 提交于 #65
- ci: 在每个 Windows 运行器上运行配对的原生子分片,由 @Iviesever 提交于 #66
- refactor: 强制实施责任优先的 C++ 布局,由 @Iviesever 提交于 #67
- refactor: 拆分项目配置职责,由 @Iviesever 提交于 #68
- refactor: 拆分模块编译编排,由 @Iviesever 提交于 #69
- refactor: 拆分模块目标编排,由 @Iviesever 提交于 #70
- refactor: 拆分 MSVC 工具链发现机制,由 @Iviesever 提交于 #71
- refactor: 统一源码依赖 JSON 解析,由 @Iviesever 提交于 #72
- refactor: 拆分 MSVC 编译器实现,由 @Iviesever 提交于 #73
- refactor: 按职责对配置测试进行分类,由 @Iviesever 提交于 #74
- refactor: 拆分源码发现机制,由 @Iviesever 提交于 #75
- refactor: 统一增量文件快照策略,由 @Iviesever 提交于 #76
- refactor: 拆分模块目标准备过程,由 @Iviesever 提交于 #77
- refactor: 统一 Windows 路径标识,由 @Iviesever 提交于 #78
- feat: 添加性能计时基准基础设施,由 @Iviesever 提交于 #79
- feat: 添加 MSVC 参数所有权引擎,由 @Iviesever 提交于 #80
- feat: 添加原生 MSVC CLI 语法支持,由 @Iviesever 提交于 #81
- feat: 添加构建和运行项目的命令,由 @Iviesever 提交于 #82
- feat: 添加具名构建配置文件,由 @Iviesever 提交于 #83
- feat: 添加对预编译头文件(PCH)的一等支持,由 @Iviesever 提交于 #84
- perf: 添加温启动无操作(no-op)快速路径,由 @Iviesever 提交于 #85
- feat: 添加自适应并行策略,由 @Iviesever 提交于 #86
- perf: 提升 MQB 吞吐量,由 @Iviesever 提交于 #87
- feat: 消除产品化参数与性能差距,由 @Iviesever 提交于 #88
- perf: 添加持久化源码发现快速路径,由 @Iviesever 提交于 #89
- perf: 使自动并行处理具备资源感知能力,由 @Iviesever 提交于 #90
- fix: 将原生 MSVC include 语义暴露给发现机制,由 @Iviesever 提交于 #91
- fix: 对原生 MSVC 编译器标记(token)形状进行建模,由 @Iviesever 提交于 #92
- perf: 复用已验证的 Visual Studio 工具链发现结果,由 @Iviesever 提交于 #93
- fix: 在库输入变更后强制执行完整重新链接,由 @Iviesever 提交于 #95
- refactor: 隔离 Visual Studio 工具链缓存,由 @Iviesever 提交于 #94
- feat: 支持图感知(graph-aware)的 MSVC 强制包含,由 @Iviesever 提交于 #96
- feat: 跟踪 MSVC 模块定义(module-definition)链接器输入,由 @Iviesever 提交于 #97
- feat: 跟踪 MSVC 链接器顺序文件(order files),由 @Iviesever 提交于 #98
- feat: 跟踪 MSVC 链接器存根(stub)输入,由 @Iviesever 提交于 #99
- feat: 跟踪 MSVC 链接器清单(manifest)输入,由 @Iviesever 提交于 #100
- perf: 强制执行基准测试证据契约,由 @Iviesever 提交于 #102
- feat: 跟踪显式 MSVC DEFAULTLIB 的新鲜度(更新状态),由 @Iviesever 提交于 #101
- fix: 强制执行精确的 MSVC 参数清单,由 @Iviesever 提交于 #103
- fix: 将 MSVC 调用与环境选项变量隔离,由 @Iviesever 提交于 #104
- fix: 在遇到未跟踪的编译器 PDB 调试模式时安全中止(fail closed),由 @Iviesever 提交于 #105
- fix: 跟踪 LINK 的 PDB、清单和映射(map)输出,由 @Iviesever 提交于 #106
- fix: 隔离 LINKREPRO 诊断产物,由 @Iviesever 提交于 #107
- fix: 跟踪原始 WHOLEARCHIVE 库的新鲜度,由 @Iviesever 提交于 #108
- fix: 在遇到基于环境的外部包含(external includes)时安全中止,由 @Iviesever 提交于 #109
- fix: 对 AddressSanitizer 链接策略进行建模,由 @Iviesever 提交于 #110
- fix: 跟踪编译器推断的 LibFuzzer 运行时输入,由 @Iviesever 提交于 #111
- fix: 在遇到 Kernel AddressSanitizer 模式时安全中止,由 @Iviesever 提交于 #112
- fix: 跟踪编译器注入的 VCAsan 库输入,由 @Iviesever 提交于 #113
- fix: 跟踪经典 OpenMP 运行时的新鲜度,由 @Iviesever 提交于 #114
- fix: 跟踪传递性默认库的新鲜度,由 @Iviesever 提交于 #115
- fix: 跟踪 /BASE 响应文件的新鲜度,由 @Iviesever 提交于 #116
- feat: 暴露原生库管理器(librarian)参数,由 @Iviesever 提交于 #117
- perf: 封装 include 搜索解析的新鲜度,由 @Iviesever 提交于 #118
- fix: 封闭有效的 MSVC 工具链环境标识,由 @Iviesever 提交于 #119
- fix: 补全动态调试的所有权与语义清单,由 @Iviesever 提交于 #120
- fix: 将一等 PCH 支持与智能发现相集成,由 @Iviesever 提交于 #121
- refactor: 确立 Windows 路径标识的权威性,由 @Iviesever 提交于 #122
- fix: 完善库管理器(librarian)原生用户体验,由 @Iviesever 提交于 #123
- perf: 消除最终的跨阶段产品化差距,由 @Iviesever 提交于 #124
- perf: 确立 Unicode 路径和缓存状态的权威性,由 @Iviesever 提交于 #125
完整变更日志: [https://github.com/Ivi...
v5.1.0
更新内容
- feat: 支持外部预构建的命名模块提供者,由 @Iviesever 提交于 #58
- feat: 支持 MSVC import std 模块提供者,由 @Iviesever 提交于 #59
- fix: 使用 Unicode 安全的路径标识传播 MSVC 传递引用,由 @Iviesever 提交于 #60
- docs/release: 全面修订文档并准备 v5.1.0 版本,由 @Iviesever 提交于 #61
- release: 发布仅包含运行时的稳定版 ZIP 压缩包,由 @Iviesever 提交于 #62
完整更新日志: v5.0.0...v5.1.0
v5.0.0
MQB v5.0.0 于 2026-08-12 发布,是原生 C++ 主线的首个正式稳定版,也是与旧 PowerShell 实现完成切割后的第一个稳定版本。
本版本统一为三个入口:
- 可执行文件:
mqb.exe - 命令:
mqb - 项目配置:
mqb.json
主要变化
原生构建流水线
MQB 现在直接以原生 C++ 实现驱动 MSVC:
- 支持
.c、.cpp、.cc、.cxx; - 自动发现 Visual Studio 或 portable MSVC toolchain;
- 单入口可使用 smart source discovery,多入口可使用精确 source set;
- compile、link、archive 使用独立增量缓存,状态统一写入项目
.mqb/; -j/--jobs支持有界并行 scan/compile。
Target 与编译策略
v5.0.0 支持:
exe、dll和普通statictarget;MD/MDd/MT/MTdruntime;- LTCG;
console/windowssubsystem;- include path、define、library path、library,以及原样 compiler/linker argv。
这些策略可通过 CLI 或严格的 mqb.json 配置;标量选项遵循 CLI > mqb.json > default。
C++ Modules / Header Units
首个稳定版支持 project-local named modules 与 project-local header units。依赖拓扑由 MSVC /scanDependencies 的 P1689 数据决定,而不是通过源码文本猜测。
构建后运行
可执行目标可直接运行:
mqb main.cpp --run -- input.txt "hello world"-- 之后的参数会作为结构化 argv 传给目标程序。
从旧 PowerShell 版本升级
v5.0.0 是明确的兼容性断点。以下旧入口不再发布或自动兼容:
build.ps1与buildcompatibility command;build-legacy.ps1/ legacy rollback;- PowerShell profile 注入;
- 旧安装的自动迁移;
msvc_list.json;-config、-std、-type、-run、-env、-flags、-link_flags等 PowerShell-era 单横线别名。
请以 mqb --help 和 mqb.json 为新的权威接口。旧拼写会直接报错,不会静默进入兼容路径。
安装
下载以下两个 release artifact:
msvc-quick-build-v5.0.0-windows-x64.zip
msvc-quick-build-v5.0.0-windows-x64.zip.sha256
校验 checksum 后解压并运行:
.\install.bat默认安装目录为:
%USERPROFILE%\bin
重新打开终端后可验证:
mqb --help首行应为:
MQB 5.0.0 - MSVC Quick Build (C++ refactor)
安装器不会修改 PowerShell profile,也不会创建旧 build 命令。mqb.exe 使用静态 MSVC runtime,因此运行 MQB 本身不要求额外安装 Visual C++ Redistributable。
卸载:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$HOME\bin\uninstall-mqb.ps1"v5.0.0 的已知边界
以下能力 不属于最初发布的 v5.0.0:
- external / prebuilt named-module IFC provider;
- MSVC toolchain-owned
import std;/import std.compat;; - 需要 Modules/Header Units pipeline 的 static-library target。
这些场景在该版本中显式 fail closed。后续 main 的能力扩展不应被倒推为 v5.0.0 已发布能力。
发布验证
v5.0.0 的正式 artifact 由 MQB 自举链生成和验证:
pinned v5.0.0-rc.2 seed
↓
Stage 0
↓ MQB-built Release test graph
Stage 1
↓ clean build state
Stage 2
发布门禁验证了:
- pinned seed 的 checksum 与 executable identity;
- 当时完整的 67/67 Release tests;
- Stage 0 → Stage 1 → clean Stage 2 self-host closure;
- 发布包中的
mqb.exe与已验证 Stage 1 byte-identical; - exact package manifest 与 checksum;
- install / reinstall / uninstall lifecycle;
- tag 与
release/VERSION一致,publication 使用已验证 artifact,不重新构建。
正式 Windows x64 ZIP 的 SHA-256 为:
eec1d8ae80ff8ade23f438ad53ec253ad67b36a81481759dc6bba0d108cc3d12
历史预发布
v5.0.0-rc.1 与 v5.0.0-rc.2 保留为历史 prerelease,不重写其发布内容。
许可证
MQB v5.0.0 使用 Apache License 2.0。完整条款见 LICENSE。
v5.0.0-rc.2
此预发布版本在 v5.0.0-rc.1 的基础上,进一步推进了独立的 Windows x64 C++ 重写版。它在 Visual Studio 2026 的 GitHub 运行器上进行构建和测试,并在继续进行稳定版 v5 行为一致性对齐工作的同时,保留 PowerShell 实现作为传统和默认的安装路径。
自 rc.1 以来的变更
- 现已在支持 C++ 源文件的基础上,新增对原生 C
.c翻译单元的支持 - C 语言发现机制是语言隔离的:诸如
module、import和export等合法的 C 标识符不会进入 C++ 模块管线 - 通过
--runtime MD|MDd|MT|MTd以及兼容旧版的-runtime实现强类型的 MSVC 运行时选择 - 通过
--subsystem console|windows以及兼容旧版的-subsystem实现强类型的可执行子系统选择 - 严格的
mqb.jsonv1 现已支持build.runtime和build.subsystem - 运行时变更将参与编译身份的计算,并强制进行所需的下游链接;仅限子系统的变更会使链接身份失效,但无需重新编译新鲜的翻译单元
- 运行时策略仍由后端接管,因此存在冲突的原始编译器参数无法覆盖强类型的运行时选项
现有的 C++ RC 功能
- 新的 CLI 路径为独立的且无 PowerShell 运行时依赖的原生
mqb.exe - 自动发现 Visual Studio 或便携版 MSVC
- 单入口智能源文件发现与显式的多源文件目标
- 位于
.mqb/目录下的增量编译与链接缓存 - 通过
--jobs实现有界并行扫描与编译 - 通过
mqb.json进行严格的项目配置 - 项目本地命名模块,包括提供者发现和分区
- 项目本地头文件单元,支持 P1689 拓扑结构、生成 IFC、新鲜度检查与重构建传播,以及缺失 IFC 修复
- 结构化的
--run参数以及库、包含目录、宏定义和原始构建策略选项 - 测试套件中实现了基于已安装 MSVC 的真实冷启动、热启动、变异与修复覆盖率测试
安装此 RC 版本
- 从此预发布页面下载
vscode-msvc-quick-build-v5.0.0-rc.2-windows-x64.zip及其.sha256文件。 - 校验 SHA-256 校验和,解压压缩包,并将其所在目录添加到
PATH环境变量中。 - 运行
mqb --help;第一行输出必须为MQB 5.0.0-rc.2 - MSVC Quick Build (C++ refactor)。 - 在项目目录中,尝试运行
mqb main.cpp --run或mqb main.c --run。
打包的可执行文件使用静态 MSVC 运行时,因此该 RC 版本无需单独安装 Visual C++ 运行库。
RC 版本范围限制
此版本依然是发布候选版本,并非最终的 PowerShell 到 C++ 的切换版本。仓库现有的 build.ps1、install.bat 以及 PowerShell 配置文件仍是传统且默认的安装路径。
DLL 和静态库目标类型不包含在 rc.2 中。DLL 目标路由的相关工作在单独继续进行中,而静态库需要专用的 lib.exe 或库管理器管线,而不是假装它们是链接器目标。
外部和预构建的命名模块提供者以及 import std 也有意保持不受支持及作报错拦截处理。稳定的 v5 版本仍需要完成显式的行为一致性对齐、安装程序与默认命令的切换,以及追踪在 issue #26 中的稳定发布工程关卡。
如果在原生 C++ CLI 意图支持的工作流中,此 RC 版本的构建行为与传统的 PowerShell 行为出现差异,请向我们报告并提供一个最小复现示例。
v5.0.0-rc.1
此预发布版本是 C++ 重写版的首个可分发构建版本:一个独立的 Windows x64 mqb.exe,已在 Visual Studio 2026 的 GitHub 运行器上完成构建与测试。
已就绪的功能
- 原生 C++ 可执行文件,新的 CLI 路径不再依赖 PowerShell 运行时
- 自动发现 Visual Studio / 便携版 MSVC
- 单入口智能源文件发现与显式的多源文件目标
- 位于
.mqb/目录下的增量编译与链接缓存 - 通过
--jobs实现有界并行扫描/编译 - 通过
mqb.json进行项目配置 - 项目本地 C++ 命名模块,包括提供者发现和分区
- 项目本地头文件单元(
import "header.hpp";/import <header>;),支持 P1689 拓扑结构、生成 IFC、增量新鲜度检查(incremental freshness)、重构建传播以及缺失 IFC 修复 - 结构化的
--run参数以及库/包含目录/宏定义(library/include/define)选项 - C++ 测试套件中实现了真实的 VS2026 冷/暖/变异/修复覆盖率测试
安装此 RC 版本
- 从此预发布页面下载
vscode-msvc-quick-build-v5.0.0-rc.1-windows-x64.zip及其.sha256文件。 - 校验 SHA-256 校验和,解压压缩包,并将其所在目录添加到
PATH环境变量中。 - 运行
mqb --help;第一行输出必须为MQB 5.0.0-rc.1 - MSVC Quick Build (C++ refactor)。 - 在项目目录中,尝试运行
mqb main.cpp --run。
该可执行文件使用静态 MSVC 运行时构建,因此该程序包无需单独安装 Visual C++ 运行库。
RC 版本范围限制
这特意发布为一个发布候选版本,而非最终的 PowerShell 到 C++ 切换版本。现有的 build.ps1 / build 安装方式仍然是稳定的传统入口,不会被此安装包替换。
对于外部/预构建的命名模块提供者以及 import std,C++ 重写版目前仍不支持并会直接报错拦截。完整的 PowerShell ↔ C++ 行为一致性对齐、安装程序/配置文件切换,以及任何剩余的仅限传统版使用的开关选项,均有意推迟到了稳定的 v5 版本发布前处理。
如果在 C++ CLI 意图支持的工作流中,此 RC 版本的构建行为与传统的 PowerShell 行为出现差异,请向我们报告并提供一个最小复现示例。
v4.1.0 发布
v4.0.0 发布
v3.1.0 发布
本次更新主要剥离了对 Visual Studio 的硬性要求,新增独立便携版(免安装)支持,并修复了多处特定 Windows 环境下的兼容性 Bug,确保在任意纯净 Windows 平台上直接编译现代 C++23 项目。
更新内容
-
便携版 MSVC 支持(脱离 VS 独立运行)
- 发布了约 900MB 的独立版工具链压缩包
portable_msvc.zip(内含最新的cl.exe、link.exe及 Windows 10/11 的所有必需 SDK 头文件和库)。 - 新增
pbuild.ps1:独立于系统环境变量运行的便携版构建脚本,依靠加载临时系统环境进行 C++ 编译,不对用户本地环境变量产生污染。 - 修复了便携版编译 C++23 模块时,因为缺失物理 VS 安装路径导致
std.ixx文件寻址为空、依赖链断裂的 Bug。
- 发布了约 900MB 的独立版工具链压缩包
-
跨版本 PowerShell 的编码与运行修复
- 彻底修复中文字符解析异常:弃用 UTF-8 BOM 方案,将底层
.ps1文件整体重制为原生的UTF-16 LE编码,根本性解决了在 Windows PowerShell 5.1 旧版本上解析非 ASCII 字符导致的命令解析大面积崩溃问题。 - 解决 Alias 跨进程传参失效:重构了
Microsoft.PowerShell_profile.ps1,强制所有快捷脚本动作在当前主线进程空间内生效,不再拉起全新的pwsh.exe或powershell.exe空白进程,既加速了启动,也消除了多重配置表污染。 - 异常屏蔽补丁:加入了预判断拦截层,修复了由于新机临时目录未生成时,早期脚本调用
Remove-Item -Recurse删除抛出的非法传参红字警告。
- 彻底修复中文字符解析异常:弃用 UTF-8 BOM 方案,将底层
【使用说明(针对便携版)】
如果你不想安装 Visual Studio,请按下列步骤配置便携包:
- 在下方 Assets(或123 云盘:https://www.123912.com/s/4Y1ovd-8Xbad ) 中下载
vscode-msvc-quick-build-v3.1.0.zip并解压。 - 将
portable_msvc.zip通过文件管理器解压至:C:\Users\<本机用户名>\bin\portable_msvc。 - 执行如下终端命令完成配置:
Copy-Item "pbuild.ps1" "$HOME\bin\pbuild.ps1" -Force
Copy-Item "Microsoft.PowerShell_profile.ps1" "$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1" -Force(注意:请确保系统中允许执行本地 PowerShell 脚本 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser)
- 重启终端后,进入你的开发目录便可直接编译(第一次编译大应用可能会被 Windows Defender 安全监测略加拖缓,属于正常现象):
pbuild main.cpp -smart -std latest -run