Visual Studio笔记:MSVC工具集、MSBuild
1. MSVC工具集
1.1 什么叫MSVC工具集
也可以说Visual Studio平台工具集(Platform toolset).
这些工具包括 C/C++ 编译器、链接器、汇编程序和其他生成工具以及匹配的库和头文件。
Visual Studio 2015、Visual Studio 2017 和 Visual Studio 2019 是二进制兼容的。 工具集的主版本(仍为 14)显示了这一点。这里提一下版本的通常约定:
- 主版本号(x):变化可能导致不兼容(如接口删除或修改)。
- 次版本号(y):通常向下兼容(新增接口但保留旧接口)。
- 修订号(z):完全兼容(仅修复错误或优化)
在 Visual Studio 2019 或 Visual Studio 2017 中编译的项目与 2017 和 2015 项目 ABI 后向兼容。 自 Visual Studio 2015 以来,次版本对于每个版本都按 1 更新:
- Visual Studio 2015:v140
- Visual Studio 2017:v141
- Visual Studio 2019:v142
- Visual Studio 2022:v143
Microsoft C++ (MSVC) 编译器工具集也可以作为独立的包下载。 如果不打算使用 Visual Studio IDE,则不需要安装它(理解为可以不安装visual studio IDE,仅安装msvc 工具集,打开安装器,不选择工作负载,只在单个组件下选择自己需要的msvc工具集即可。但安装后,实际上安装了IDE,但相比占的磁盘空间少了很多,应该是少安装了很多东西)。我本机安装了两个MSVC 工具集:
打开目录看下:
Bin目录下有cl.exe, link.exe等等
1.2. 通过命令行使用MSVC工具集
https://learn.microsoft.com/zh-cn/cpp/build/building-on-the-command-line?view=msvc-170
在 Visual Studio 安装程序中选择一个 C++ 工作负载(如使用 C++ 的桌面开发)时,它会安装 Visual Studio平台工具集。 平台工具集具有用于特定 Visual Studio 版本的所有 C 和 C++ 工具。 这些工具包括 C/C++ 编译器、链接器、汇编程序和其他生成工具以及匹配的库和头文件。 可以在命令行中使用所有这些工具。 Visual Studio IDE在内部也使用这些工具。 可使用单独的 x86 托管和 x64 托管的编译器和工具来生成 x86、x64、ARM 和 ARM64 目标代码。用于特定主机和目标生成体系结构的每组工具都存储在其自己的目录中。
需要设置几个特定的环境变量,这些工具才能正常运行。 这些变量用于将工具添加到路径,并设置包含文件、库文件和 SDK 的位置。 为了便于设置这些环境变量,安装程序会在安装期间创建自定义的命令文件或批处理文件。可运行其中一个命令文件,以设置特定的主机和目标生成体系结构、Windows SDK 版本和平台工具集。
命令文件主机和目标体系结构
- vcvars32.bat: 使用 32 位 x86 本机工具生成 32 位 x86 代码。
- vcvars64.bat: 使用 64 位 x64 本机工具生成 64 位 x64 代码。
- vcvarsx86_amd64.bat: 使用 32 位 x86 本机兼容工具生成 64 位 x64 代码。
- vcvarsamd64_x86.bat: 使用 64 位 x64 本机兼容工具生成 32 位 x86 代码。
- vcvarsx86_arm.bat: 使用 32 位 x86 本机兼容工具生成 ARM 代码。
- vcvarsamd64_arm.bat: 使用 64 位 x64 本机兼容工具生成 ARM 代码。
- vcvarsx86_arm64.bat: 使用 32 位 x86 本机兼容工具生成 ARM64 代码。
- vcvarsamd64_arm64.bat: 使用 64 位 x64 本机兼容工具生成 ARM64 代码。
- vcvarsall.bat: 使用参数指定主机和目标体系结构、Windows SDK 和平台选项。 有关支持的选项列表,请使用 /help 参数进行调用。
默认情况下,Visual Studio IDE 使用基于 MSBuild 的本机项目生成系统。 你可以直接调用 MSBuild来生成项目,而无需使用 IDE。 还可以通过使用 devenv 命令使用 Visual Studio 来生成项目和解决方案。 VisualStudio 还支持基于 CMake 或 NMake 的生成系统。
- MSBuild: 使用 MSBuild (msbuild.exe) 和项目文件 (.vcxproj) 来配置生成并调用工具集,而无需加载 Visual Studio IDE。 这相当于在 Visual Studio IDE 中运行“生成”项目或“生成解决方案”命令。 当你在命令行进行生成时,MSBuild 比 IDE 更具优势。 你无需在所有的生成服务器和生成管道上安装完整的 IDE。 这可避免 IDE的额外开销。 MSBuild 在容器化生成环境中运行,并支持二进制记录器。
- DEVENV: 将 DEVENV (devenv.exe) 与命令行开关(例如,/Build 或 /Clean)结合使用,可在不显示 Visual Studio IDE 的情况下执行某些生成命令。
- CMake: CMake (cmake.exe) 是一种跨平台开源工具,用于定义在多个平台上运行的生成过程。 CMake 可以为它支持的平台(例如 MSBuild 和 Make)配置和控制本机生成工具。 有关 CMake 的详细信息,请参阅 CMake 文档。
- NMAKE: 使用 NMAKE (nmake.exe) 来通过使用传统的生成文件以生成 C++ 项目。
2. MSBuild
MSBuild (msbuild.exe) 根据项目文件 (.vcxproj) 来配置生成并调用工具集,而无需加载 Visual Studio IDE。 这相当于在 Visual Studio IDE 中运行“生成”项目或“生成解决方案”命令。 当你在命令行进行生成时,MSBuild 比 IDE 更具优势。 你无需在所有的生成服务器和生成管道上安装完整的 IDE。 这可避免 IDE 的额外开销。 MSBuild 在容器化生成环境中运行,并支持二进制记录器。