Visual Studio笔记:MSVC工具集、MSBuild

article/2025/6/19 19:26:45

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 在容器化生成环境中运行,并支持二进制记录器。


http://www.hkcw.cn/article/OEmYrLPXJm.shtml

相关文章

【系统配置与部署类】docker的深度配置和应用

相关文章已经在个人博客网站上更新,欢迎访问: docker的深度配置和应用http://www.turnin-blog.online/articles/%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE%E4%B8%8E%E9%83%A8%E7%BD%B2/docker%E7%9A%84%E6%B7%B1%E5%BA%A6%E9%85%8D%E7%BD%AE%E5%92%8C%E5%B…

Redis最佳实践——安全与稳定性保障之数据持久化详解

Redis 在电商应用的安全与稳定性保障之数据持久化全面详解 一、持久化机制深度解析 1. 持久化策略矩阵 策略触发方式数据完整性恢复速度适用场景RDB定时快照分钟级快容灾备份/快速恢复AOF实时追加日志秒级慢金融交易/订单关键操作混合模式RDBAOF同时启用秒级中等高安全要求场…

告别硬编码!用工厂模式优雅构建可扩展的 Spring Boot 应用 [特殊字符]

嗨,各位技术伙伴们!👋 在日常的软件开发中,我们经常面临需求变更的挑战。如何构建一个既能满足当前需求,又能轻松应对未来变化的系统呢?答案往往藏在那些经典的设计模式中。 今天,我们就来聊聊…

azure web app创建分步指南系列之二

为注册表授权托管标识 你创建的托管标识尚未获得从容器注册表中提取数据的授权。在此步骤中,你将启用授权。 返回容器注册表的管理页面: 在左侧导航菜单中,选择“访问控制 (IAM)”。选择“添加角色分配”。此屏幕截图显示了如何为容器注册表启用添加角色分配。在角色列表中…

使用Yolov8 训练交通标志数据集:TT100K数据集划分

使用Yolov8 训练交通标志数据集:TT100K数据集划分(一) 一、数据集下载二、划分数据集三、目录放置 一、数据集下载 官方网址:TT100K 数据集对比 源码如下: def classes(filedir):with open(filedir) as f:classes …

【PostgreSQL 03】PostGIS空间数据深度实战:从地图服务到智慧城市

PostGIS空间数据深度实战:从地图服务到智慧城市 关键词 PostGIS, 空间数据库, 地理信息系统, GIS, 空间查询, 地理分析, 位置服务, 智慧城市, 空间索引, 坐标系统 摘要 PostGIS是PostgreSQL的空间数据扩展,它将普通的关系数据库转变为强大的地理信息系统…

Wireshark 使用教程:让抓包不再神秘

一、什么是 tshark? tshark 是 Wireshark 的命令行版本,支持几乎所有 Wireshark 的核心功能。它可以用来: 抓包并保存为 pcap 文件 实时显示数据包信息 提取指定字段进行分析 配合 shell 脚本完成自动化任务 二、安装与验证 Kali Linux…

环境变量Path单行显示改回多行列表显示

环境变量Path单行显示改回多行列表显示 今天去配置环境变量时,双击Path竟然只显示一行,明明记得上次还时一个列表显示来着。由于以前有删除了所有Path变量的经历,所以看到这个情况属实吓我一跳且一脸懵。 仔细地看了一下,Path中…

CodeTop100 Day18

52、最长的有效括号 括号问题需要考虑栈,而最长有效的括号就要考虑动态规划了 这里定义dp[i]为以i-1位置结尾的最长合法括号字串 遍历字符串,当遇到左括号,压入栈,dp[i1]0,遇到右括号,如果栈不为空,配对左…

NLP基础:从词嵌入到预训练模型应用

NLP基础:从词嵌入到预训练模型应用 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 NLP基础:从词嵌入到预训练模型应用摘要引言一、词嵌入技术:从离散到连续的语义表示1. 传统词嵌…

STM32CubeMX串口配置

STM32CubeMX串口配置 一,Mode1,Asynchronous(异步模式)2,其他模式3,异步通信中的流控 二,Configuration参数配置(Parameter Settings)1,Basic Parameters2,Advanced Para…

Java内存模型(JMM)与多线程编程实战

最近正在复习Java八股,所以会将一些热门的八股问题,结合ai与自身理解写成博客便于记忆 今天将以这四个问题为依据。 一、JMM内存模型解析 1. JMM核心概念 Java内存模型(Java Memory Model)定义了Java程序中各种变量(线程共享变量&#xf…

Spring Cache核心原理与快速入门指南

文章目录 前言一、Spring Cache核心原理1.1 架构设计思想1.2 运行时执行流程1.3 核心组件协作1.4 关键机制详解1.5 扩展点设计1.6 与Spring事务的协同 二、快速入门实战三、局限性3.1 多级缓存一致性缺陷3.2 分布式锁能力缺失3.3 事务集成陷阱 总结 前言 在当今高并发、低延迟…

【设计模式-4.5】行为型——迭代器模式

说明:本文介绍设计模式中,行为型设计模式之一的迭代器模式。 定义 迭代器模式(Iterator Pattern),也叫作游标模式(Cursor Pattern),它提供一种按顺序访问集合/容器对象元素的方法&…

【Python训练营打卡】day40 @浙大疏锦行

DAY 40 训练和测试的规范写法 知识点回顾: 1. 彩色和灰度图片测试和训练的规范写法:封装在函数中 2. 展平操作:除第一个维度batchsize外全部展平 3. dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropo…

软件技术如何赚钱

1. 开发并销售软件产品​ ​ 独立应用开发:针对特定需求或市场痛点,开发移动应用、桌面软件或网页应用。例如,开发一款专注于时间管理的移动应用,帮助用户提高工作效率。以 Python 结合 Kivy 框架开发一个简单的待办事项应用为例…

【Github/Gitee Webhook触发自动部署-Jenkins】

Github/Gitee Webhook触发自动部署-Jenkins #mermaid-svg-ryhZQMOzmkQZNMwX {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ryhZQMOzmkQZNMwX .error-icon{fill:#552222;}#mermaid-svg-ryhZQMOzmkQZNMwX .error-tex…

华为OD机试真题——最小的调整次数/特异性双端队列(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《最小的调整次数/特异性双端…

建筑兔零基础人工智能自学记录101|Transformer(1)-14

Transformer 谷歌提出,一组编码-解码器 可以同时处理,通过位置编码来处理单词 实质是token词语接龙(只是有不同的概率) token对应向量 Transformer简述 文生图就需要用到transformer黑箱 token 内部层次 中间主要是embedding…

网线水晶头接法与8根线芯作用解析

网线的正确接法至关重要,它直接影响网络的稳定性与传输速度。而了解每根线的作用,更是深入掌握网络布线知识的关键。常见的网线为非屏蔽双绞线(UTP),内部包含 8 根不同颜色的线芯,两两相互缠绕,…