第1.7章: MSVC(仅限 Windows)
什么是 MSVC?
MSVC(Microsoft Visual C++)是微软官方的 C 和 C++ 编译器,随 Visual Studio 一同提供。 它是 Windows 开发的默认编译器,并与 Windows SDK、 微软调试器以及 Visual Studio IDE 紧密集成。
cl.exe 并未实现
赫布异常(那里根本没有 -fherbceptions),因此本库所基于的错误
契约无法用它表达。你可以阅读本页来了解 MSVC 是什么,以及 Windows 二进制文件是如何产出的,
但本教程中的所有代码都是用我们的 GCC 或 LLVM 分支构建的——对于 Windows 目标,
请使用我们的 Clang 加 --config=$HOME/cfgs/x86_64-windows-msvc.cfg,
或者我们的 MinGW GCC。确切的命令见 第1.8章。
安装 Visual Studio(MSVC)
如果你在 Windows 上,可以使用微软官方的 C++ 编译器: MSVC(Microsoft Visual C++),它随 Visual Studio 提供。
我们建议安装 Visual Studio Insider 而不是稳定版通道。 Insider 版本提供最新的 MSVC 工具链、更新的头文件以及最新的 C++ 特性。
在此下载 Visual Studio Insider:
https://visualstudio.microsoft.com/insiders/
安装步骤:
- 下载并运行 Visual Studio 安装程序
- 选择 Desktop development with C++
- 安装 MSVC 工具链与 Windows SDK
安装完成后,你必须使用适用于你的架构的 Visual C++ 开发者命令提示符:
- x64 Native Tools Command Prompt(最常见)
- x86 Native Tools Command Prompt
- ARM64 Native Tools Command Prompt(Surface Pro 11、Surface Laptop 7 等)
这些命令提示符会配置所有必需的环境变量,例如 INCLUDE、
LIB 和 PATH。
在普通命令提示符中运行 cl.exe 无法正常工作。
使用 MSVC 编译 Windows 二进制文件
进入正确的开发者命令提示符后,你可以这样编译 Windows 二进制文件:
cl /EHsc /Ox hello.cpp /std:c++latest /GL /MD
这会产出 hello.exe,并链接到 Microsoft Visual C++ 运行时。
你并不需要 MSVC 来创建 MSVC 兼容的 Windows 二进制文件
虽然 MSVC 是微软的官方编译器,但你并不需要 MSVC 来创建 使用 MSVC 运行时的 Windows 二进制文件。
在 第1.4章 和 第1.5章 中,我们展示了如何使用 Clang 搭配 windows-msvc-sysroot 包。 这个 sysroot 包含了所有 MSVC 头文件与库,由本教程作者提取并打包。
借助这个 sysroot,你可以在以下平台上构建 MSVC 兼容的 Windows 二进制文件:
- Linux
- macOS
- Android
- FreeBSD
- Windows
- 任何能运行 Clang 的平台
这意味着你完全不需要安装 Visual Studio 或 MSVC。
许多 C++ 开发者认为 MSVC 的编译器前端与诊断信息不如 Clang 和 GCC。 你当然可以试试 MSVC,但本教程强烈建议改用 Clang 或 GCC。
本教程为何使用 Clang
在本教程中,我们主要使用 Clang,因为:
- 它能轻松地在所有平台之间交叉编译
- 它可以面向 Windows、Linux、macOS、Android 和 WebAssembly
- 它能与
windows-msvc-sysroot干净地集成 - 它能产出 WebAssembly 二进制文件
- 它支持诸如 WebAssembly 内存标记之类的高级工具
如果你还没读过 第1.4章 和 第1.5章,建议回顾一下,以理解 Clang 交叉编译是如何工作的。