Skip to content

Releases: Iviesever/msvc-quick-build

v5.3.1

Choose a tag to compare

@github-actions github-actions released this 26 Aug 18:03
82e2e0d

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

Choose a tag to compare

@Iviesever Iviesever released this 26 Aug 16:25

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

Choose a tag to compare

@github-actions github-actions released this 17 Aug 03:34

更新内容

  • 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...

Read more

v5.1.0

Choose a tag to compare

@github-actions github-actions released this 13 Aug 04:26
e925a90

更新内容

  • 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

Choose a tag to compare

@github-actions github-actions released this 12 Aug 09:21
fa28eb9

MQB v5.0.02026-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 支持:

  • exedll 和普通 static target;
  • MD / MDd / MT / MTd runtime;
  • LTCG;
  • console / windows subsystem;
  • include path、define、library path、library,以及原样 compiler/linker argv。

这些策略可通过 CLI 或严格的 mqb.json 配置;标量选项遵循 CLI > mqb.json > default

C++ Modules / Header Units

首个稳定版支持 project-local named modulesproject-local header units。依赖拓扑由 MSVC /scanDependencies 的 P1689 数据决定,而不是通过源码文本猜测。

构建后运行

可执行目标可直接运行:

mqb main.cpp --run -- input.txt "hello world"

-- 之后的参数会作为结构化 argv 传给目标程序。

从旧 PowerShell 版本升级

v5.0.0 是明确的兼容性断点。以下旧入口不再发布或自动兼容:

  • build.ps1build compatibility command;
  • build-legacy.ps1 / legacy rollback;
  • PowerShell profile 注入;
  • 旧安装的自动迁移;
  • msvc_list.json
  • -config-std-type-run-env-flags-link_flags 等 PowerShell-era 单横线别名。

请以 mqb --helpmqb.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.1v5.0.0-rc.2 保留为历史 prerelease,不重写其发布内容。

许可证

MQB v5.0.0 使用 Apache License 2.0。完整条款见 LICENSE

v5.0.0-rc.2

v5.0.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Aug 09:01
47f88d7

此预发布版本在 v5.0.0-rc.1 的基础上,进一步推进了独立的 Windows x64 C++ 重写版。它在 Visual Studio 2026 的 GitHub 运行器上进行构建和测试,并在继续进行稳定版 v5 行为一致性对齐工作的同时,保留 PowerShell 实现作为传统和默认的安装路径。

自 rc.1 以来的变更

  • 现已在支持 C++ 源文件的基础上,新增对原生 C .c 翻译单元的支持
  • C 语言发现机制是语言隔离的:诸如 moduleimportexport 等合法的 C 标识符不会进入 C++ 模块管线
  • 通过 --runtime MD|MDd|MT|MTd 以及兼容旧版的 -runtime 实现强类型的 MSVC 运行时选择
  • 通过 --subsystem console|windows 以及兼容旧版的 -subsystem 实现强类型的可执行子系统选择
  • 严格的 mqb.json v1 现已支持 build.runtimebuild.subsystem
  • 运行时变更将参与编译身份的计算,并强制进行所需的下游链接;仅限子系统的变更会使链接身份失效,但无需重新编译新鲜的翻译单元
  • 运行时策略仍由后端接管,因此存在冲突的原始编译器参数无法覆盖强类型的运行时选项

现有的 C++ RC 功能

  • 新的 CLI 路径为独立的且无 PowerShell 运行时依赖的原生 mqb.exe
  • 自动发现 Visual Studio 或便携版 MSVC
  • 单入口智能源文件发现与显式的多源文件目标
  • 位于 .mqb/ 目录下的增量编译与链接缓存
  • 通过 --jobs 实现有界并行扫描与编译
  • 通过 mqb.json 进行严格的项目配置
  • 项目本地命名模块,包括提供者发现和分区
  • 项目本地头文件单元,支持 P1689 拓扑结构、生成 IFC、新鲜度检查与重构建传播,以及缺失 IFC 修复
  • 结构化的 --run 参数以及库、包含目录、宏定义和原始构建策略选项
  • 测试套件中实现了基于已安装 MSVC 的真实冷启动、热启动、变异与修复覆盖率测试

安装此 RC 版本

  1. 从此预发布页面下载 vscode-msvc-quick-build-v5.0.0-rc.2-windows-x64.zip 及其 .sha256 文件。
  2. 校验 SHA-256 校验和,解压压缩包,并将其所在目录添加到 PATH 环境变量中。
  3. 运行 mqb --help;第一行输出必须为 MQB 5.0.0-rc.2 - MSVC Quick Build (C++ refactor)
  4. 在项目目录中,尝试运行 mqb main.cpp --runmqb main.c --run

打包的可执行文件使用静态 MSVC 运行时,因此该 RC 版本无需单独安装 Visual C++ 运行库。

RC 版本范围限制

此版本依然是发布候选版本,并非最终的 PowerShell 到 C++ 的切换版本。仓库现有的 build.ps1install.bat 以及 PowerShell 配置文件仍是传统且默认的安装路径。

DLL 和静态库目标类型不包含在 rc.2 中。DLL 目标路由的相关工作在单独继续进行中,而静态库需要专用的 lib.exe 或库管理器管线,而不是假装它们是链接器目标。

外部和预构建的命名模块提供者以及 import std 也有意保持不受支持及作报错拦截处理。稳定的 v5 版本仍需要完成显式的行为一致性对齐、安装程序与默认命令的切换,以及追踪在 issue #26 中的稳定发布工程关卡。

如果在原生 C++ CLI 意图支持的工作流中,此 RC 版本的构建行为与传统的 PowerShell 行为出现差异,请向我们报告并提供一个最小复现示例。

v5.0.0-rc.1

v5.0.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Aug 04:50
902b4a6

此预发布版本是 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 版本

  1. 从此预发布页面下载 vscode-msvc-quick-build-v5.0.0-rc.1-windows-x64.zip 及其 .sha256 文件。
  2. 校验 SHA-256 校验和,解压压缩包,并将其所在目录添加到 PATH 环境变量中。
  3. 运行 mqb --help;第一行输出必须为 MQB 5.0.0-rc.1 - MSVC Quick Build (C++ refactor)
  4. 在项目目录中,尝试运行 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 发布

Choose a tag to compare

@Iviesever Iviesever released this 15 Apr 11:14

修复少量 BUG

123云盘:“便携版”编译环境

v4.0.0 发布

Choose a tag to compare

@Iviesever Iviesever released this 11 Apr 07:43

本次更新彻底重构了终端输出,将整个消息管线、用词、排版与 VS2026 IDE 默认的 MSBuild 输出面板 1:1 对齐。所有的命令行参数也全面与 cl.exe/link.exe 的原始标志对齐。

123云盘

v3.1.0 发布

Choose a tag to compare

@Iviesever Iviesever released this 10 Apr 06:27

本次更新主要剥离了对 Visual Studio 的硬性要求,新增独立便携版(免安装)支持,并修复了多处特定 Windows 环境下的兼容性 Bug,确保在任意纯净 Windows 平台上直接编译现代 C++23 项目。

更新内容

  1. 便携版 MSVC 支持(脱离 VS 独立运行)

    • 发布了约 900MB 的独立版工具链压缩包 portable_msvc.zip(内含最新的 cl.exelink.exe 及 Windows 10/11 的所有必需 SDK 头文件和库)。
    • 新增 pbuild.ps1:独立于系统环境变量运行的便携版构建脚本,依靠加载临时系统环境进行 C++ 编译,不对用户本地环境变量产生污染。
    • 修复了便携版编译 C++23 模块时,因为缺失物理 VS 安装路径导致 std.ixx 文件寻址为空、依赖链断裂的 Bug。
  2. 跨版本 PowerShell 的编码与运行修复

    • 彻底修复中文字符解析异常:弃用 UTF-8 BOM 方案,将底层 .ps1 文件整体重制为原生的 UTF-16 LE 编码,根本性解决了在 Windows PowerShell 5.1 旧版本上解析非 ASCII 字符导致的命令解析大面积崩溃问题。
    • 解决 Alias 跨进程传参失效:重构了 Microsoft.PowerShell_profile.ps1,强制所有快捷脚本动作在当前主线进程空间内生效,不再拉起全新的 pwsh.exepowershell.exe 空白进程,既加速了启动,也消除了多重配置表污染。
    • 异常屏蔽补丁:加入了预判断拦截层,修复了由于新机临时目录未生成时,早期脚本调用 Remove-Item -Recurse 删除抛出的非法传参红字警告。

【使用说明(针对便携版)】

如果你不想安装 Visual Studio,请按下列步骤配置便携包:

  1. 在下方 Assets(或123 云盘:https://www.123912.com/s/4Y1ovd-8Xbad ) 中下载 vscode-msvc-quick-build-v3.1.0.zip 并解压。
  2. portable_msvc.zip 通过文件管理器解压至:C:\Users\<本机用户名>\bin\portable_msvc
  3. 执行如下终端命令完成配置:
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)

  1. 重启终端后,进入你的开发目录便可直接编译(第一次编译大应用可能会被 Windows Defender 安全监测略加拖缓,属于正常现象):
pbuild main.cpp -smart -std latest -run