Windows系统中vscode+MSVC的C++配置

article/2025/10/21 0:56:04

Windows系统中vscode+MSVC的C++配置

在Windows上编译C++程序不能直接使用gcc和g++命令,一般来说如果非要使用的话可以用wsl或者MinGW。过去的很长一段时间我也确实是这么做的,但是最近在学习C++20,无奈MSVC是三大主流编译器里面相关特性支持最完善的,只能捣鼓一下怎么使用,特此记录。

安装Visual Studio

MSVC可以直接通过安装Visual Studio获取,在该页面选择合适的Visual Studio版本(一般来说是选社区版,因为是免费的)就可以下载安装。

其中MSVC工具链通过选择“使用C++的桌面开发”安装:

安装截图(来源:微软官网)
安装完之后,如果使用默认的安装位置,应该在C:\Program Files (x86)\Microsoft Visual Studio\20xx\Community\VC\Tools\MSVC\xx.xx.xx\bin\Hostx64\x64\这个路径下面有编译链包含的各个工具(比如cl.exe)。

配置环境变量

虽然说我们找到了编译链工具的所在位置,但是如果现在直接调用它们进行编译是无法正常运行的,这是因为MSVC工具链还有很多额外的环境变量配置。这些变量当然可以手动配置,但是Visual Studio本身提供了一个配置脚本:C:\Program Files (x86)\Microsoft Visual Studio\20xx\Community\VC\Auxiliary\Build\vcvars64.bat,这个bat脚本中干的事情就是把那些杂七杂八的环境变量给设置好。

因此我只把这个脚本所在的文件夹加入了Path环境变量,这样一来只需在cmd中先调用vcvars64,就可以正常使用cl.exe等编译工具了:

Path环境变量

C:\Users\xxx>where cl
INFO: Could not find files for the given pattern(s).C:\Users\xxx>vcvars64
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.11.22
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'C:\Users\xxx>where cl
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\cl.exe

不过这个脚本比较坑,必须用cmd命令行才能运行,在powershell命令行中是无效的(而且依然会有配置成功的输出,真坑)。

其实这个时候就可以使用cl.exe直接进行C++源文件的编译了,比如现在有一份main.cpp

#include <iostream>int main() {std::cout << "hello" << std::endl;return 0;
}

使用命令cl.exe /EHsc /std:c++20 main.cpp就可以编译得到文件main.exe,运行后输出hello

C:\Users\xxx>type main.cpp
#include <iostream>int main() {std::cout << "hello" << std::endl;return 0;
}
C:\Users\xxx>cl /EHsc /std:c++20 main.cpp
用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.29.30147 版
版权所有(C) Microsoft Corporation。保留所有权利。main.cpp
Microsoft (R) Incremental Linker Version 14.29.30147.0
Copyright (C) Microsoft Corporation.  All rights reserved./out:main.exe
main.objC:\Users\xxx>.\main.exe
hello

所以说使用MSVC也不难。既然搞清楚了原理,就可以去编写vscode的相关文件(launch.jsontasks.json),然后让vscode也能一键使用MSVC编译运行源代码。

配置launch.jsontasks.json

在安装了C++插件之后,使用vscode打开C++源文件会在右上角显示一个小三角形,按下它就会打开编译运行的选择列表:

小三角形

配置项列表

这个列表里面有的项是默认配置的(比如上图的后面四个)。一般来说这个时候是会显示像上图一样的那个使用cl.exe编译的默认配置项,但是其实这个是没法用的(需要在命令行中先调用vcvars64.bat,然后再调用code编辑代码,太麻烦)。

上图中我的vscode显示了一个我自定义的配置(也就是第一项),这个其实是在项目根目录的.vscode文件夹中的launch.jsontasks.json中定义的:

.vscode文件夹

launch.json中有一个configurations列表,其中的项就是用户自定义的那些调试启动项,先放出我最终的文件:

{"configurations": [{"name": "C/C++: 运行活动文件(自定义)","type": "cppdbg","request": "launch","program": "${fileDirname}\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "C/C++: 生成活动文件(自定义)"}],"version": "2.0.0"
}

其中name就是会在表项中显示的名字,注意不要含有cl.exe字样,因为当前版本的vscode似乎是直接通过命名进行检测的,如果发现名字里面有cl.exe,而你又不是先调用vcvars.bat再调用code的,vscode就直接不让你运行这个任务(我真是呃呃)。

type值为cppdbg,就表示这个配置项适用于C++源文件。后面的MIModemiDebuggerPath等都是对gdb的配置,这里我就继续沿用了MinGW的gdb

program就是要运行的编译后的文件名。那么要得到这个exe文件,就要先进行编译。编译的步骤定义在tasks.json中,上面的preLaunchTask就是在指定先运行tasks.json中定义的nameC/C++: 生成活动文件(自定义)的预编译任务,该任务完成后再执行launch.json中指定的指令。

tasks.jsonlaunch.json的结构大差不差,有个tasks列表列出各个预编译任务:

{"tasks": [{"type": "cppbuild","label": "C/C++: 生成活动文件(自定义)","command": "cmd","args": ["/c","vcvars64 && cl /EHsc /std:c++20 ${file}"],"options": {"cwd": "${fileDirname}"},"problemMatcher": [ ],"group": "build","detail": "编译器生成的任务。"}],"version": "2.0.0"
}

因为我的vscode默认终端是powershell,不能直接调用vcvars64.bat,所以只能通过cmd /c的方式开一个cmd子进程运行,/c就是表示cmd直接运行后面接的指令。而后面接的具体指令是vcvars64 && cl /EHsc /std:c++20 ${file}&&是连接符,表示左边的命令正常完成之后执行右边的命令,所以其实它干的事情就是先调用vcvars64设置好各个环境变量,然后再调用cl编译vscode当前打开的C++源文件。

测试

完成上述操作之后,就可以直接点vscode右上角的三角形按钮一键使用MSVC编译运行C++程序了(另:也可以使用快捷键F5)。

另外,当前vscode的官方C++插件是默认不开启C++20相关特性的支持的,虽然说不影响编译和运行,但是写代码的时候一堆波浪线和智能提示还是让人很不爽。其实只需在settings.json中加入一项:"C_Cpp.default.cppStandard": "c++23"就可以开启C++20特性的支持了。

本人编写了一个简单的用到concept特性的代码,模拟实现了python中的enumerate函数,都是可以正常编译运行的:

#include <iostream>
#include <vector>template <typename T> 
concept Iterable = requires(T x) { x.begin(); x.end(); };template <Iterable T>
class enumerate {int start;T obj;using _T_Iter = decltype(obj.begin());class _Iter {int index;_T_Iter iter;public:_Iter(int index, _T_Iter iter): index(index), iter(iter) {}void operator ++ () { ++iter, ++index; }void operator ++ (int) { ++iter, ++index; }auto operator * () { return std::pair(index, *iter); }bool operator == (const _Iter& i) const { return iter == i.iter; }bool operator != (const _Iter& i) const { return iter != i.iter; }};
public:enumerate(T obj, int start = 0): obj(std::move(obj)), start(start) {}auto begin() { return _Iter(start, obj.begin()); }auto end() { return _Iter(start, obj.end()); }
};int main() {std::vector vec = {1, 4, 8, 9};for (auto [index, item]: enumerate(vec)) {std::cout << "[" << index << "] " << item << std::endl;}return 0;
}

成功运行


http://chatgpt.dhexx.cn/article/6UaZdGNO.shtml

相关文章

MSVC Debug 与 Release 库

CMake Debug后缀 set_target_properties(liba PROPERTIES DEBUG_POSTFIX "d") 或者 set(CMAKE_DEBUG_POSTFIX "d") 这样生成的库或者exe程序名会多一个d字符。如下链接 vc 运行时库 通过/MD、/MT 可以改变MSVC运行库&#xff0c; /MD代表使用动态运行时…

C++ —— 使用msvc编译boost

下载源码 1、选择1.72.0版本进行编译&#xff0c;如图点击Download 2、接着选择zip进行下载 编译源码 1、将下载的boost_1_72_0.zip进行解压。 2、如图&#xff0c;打开vs本地命令工具。并在该终端进入boost_1_72_0.zip进行解压目录中。 3、在终端输入如下指令 // 生成&…

Qt 添加MSVC2017编译器(2022年保姆级教程,不安装完整VS)

目录 0. 前言1. 前期准备2. 安装2.1 安装Qt2.2 安装MSVC编译器和Windows 10 SDK 3. 配置3.1 添加MSVC编译器并选择bat文件3.2 传入脚本文件参数 4. 测试5. 总结 0. 前言 只要是Qt使用者&#xff0c;基本都遇到过安装MSVC编译器的问题。 这个问题似乎有很方便的解决办法&#…

如何用MSVC命令行编译 SQLite ?

作者&#xff1a;cuicui 这个问题的关键是如何配置MSVC 工具&#xff1a;VS2017 要编译的sqlite3源代码从https://www.sqlite.org/download.html下载 官方说明中的方法是 cl shell.c sqlite3.c -Fesqlite3.exe如果没有配置MSVC是无法编译的。经过自己实验&#xff0c;用下面…

在windows下使用MSVC编译ffmpeg

FFmpeg 在windows上面用msvc编译 首先你得准备好msys2环境&#xff0c;安装好对应的工具链&#xff0c;msys2他本身提供了三个环境&#xff0c;但是这次我们是用msvc去编译用哪个环境都无所谓&#xff0c;但是你在哪个环境装的工具链就进入到哪个环境&#xff0c;msys2是环境隔…

Qt Creator配置MSVC编译器

Qt Creator配置MSVC编译器 配置&#xff1a; WINDOWS 7系统4.9.0 Qt CreatorMSVC 2017VS 2017 步骤&#xff1a; VS官网下载Visual Studio Community 2017&#xff0c;在线安装Visual Studio Community2017版本。下载并安装Windows10 SDK, 直接下载.exe版本&#xff0c;然后…

MSVC命令行环境配置

MSVC是微软Windows平台Visual Studio自带的C/C编译器&#xff0c;但是这个IDE比较庞大&#xff0c;有时候我们写一个小程序没有必要去启动IDE&#xff0c;所以可以配置一下MSVC编译器&#xff0c;这样我们就可以通过命令行的方式或者其他一些轻量的工具接入MSVC编译器。 笔者演…

QtCreator配置MSVC

文章目录 1.配置编译器Compiler2.配置调试器(Debugger)3.配置构建套件(Kit) 配置Qt kits需要配置编译器和调试器 1.配置编译器Compiler 配置MSVC需要先下载vs,通过vs安装编译器 具体资料地址 https://www.zhihu.com/question/358058090/answer/1188440282 2.配置调试器(Deb…

Qt离线安装MSVC方法

安装好Qt后&#xff0c;有时候需要用到MSVC编译环境&#xff0c;如果电脑连接了互联网&#xff0c;直接下载安装器在线安装即可&#xff0c;那么需要为没有联网的电脑安装MSVC时&#xff0c;就需要采用下载离线安装包&#xff0c;离线安装的方法&#xff0c;MSVC安装器下载地址…

qt配置msvc

因为mingw是自带的&#xff0c;所以说不用配置直接勾选。但是mingw有一个不足就是有些库用mingw不方便比如opencv。而且web功能&#xff0c;mingw并不支持&#xff0c;今天谈怎么配置msvc。 1.下载vs:重点相关的c和sdk下载 2.下载qt5.14.2之后要自己编译&#xff0c;使用中科…

Qt MSVC开发

环境搭建 安装Virsual Studio&#xff0c;版本可以选择最新版本&#xff0c;我安装的时vs2022&#xff0c;安装时需要勾选 C 桌面开发 安装QT, 下载地址&#xff1a;https://download.qt.io/official_releases/online_installers/&#xff0c;安装时需要选择MSVC 2019 64-bit。…

MSVC编译器介绍

MSVC简介&#xff1a; 与Linux系列操作系统不同&#xff0c;Windows原生环境不提供类似gcc&#xff0c;Clang的C/C语言源程序编译运行工具链。运行在Windows上的IDE&#xff08;集成开发环境&#xff09;&#xff0c;比如CodeBlocks之类&#xff0c;一般都使用MinGW&#xff0…

PAC的编码

PAC的编码 今晚的沙龙讲到了PAC&#xff0c;在此搬运一下比较简单易懂的部分。 PAC的编码是基于类似于两个D触发器的思路&#xff0c;也就是和时序有关。 PAC编码的思路导图&#xff0c;如下所示&#xff1a;

windows 开启pac,完成规则代理

特别鸣谢 10分钟搭建linux代理服务器_三雷科技的博客-CSDN博客 Windows7/10/11 Pac代理脚本及配置_pac脚本_ylf尘风的博客-CSDN博客 1. 代理服务器搭建 yum install tinyproxy代理服务器&#xff0c;配置 编辑配置/etc/tinyproxy/tinyproxy.conf&#xff1a; &#xff08;1&…

解析PAK文件

工具好不好主要看用的人 ----Mantra 众所周知&#xff0c;UE4打包之后生成的资源文件被压缩成.pak格式&#xff0c;那么如何找到合适的工具提取其中的资源呢&#xff1f;&#xff08;既然UE4是开源的&#xff0c;那么UE4的打包工具也应该是开源的&#xff0c;所以大佬们逆流而…

代理自动配置文件PAC的使用方法

注意&#xff1a; 1、微软从Internet Explorer&#xff08;IE&#xff09;11版本开始&#xff0c;已经弃用本地PAC文件的方式&#xff08;也就是我们说的“file://”方式&#xff09;配置自动代理了&#xff0c;只能通过http或者https方式加载代理自动配置的PAC文件 2、 Chrome…

pacp格式文件分析

1 介绍 1.1. 五元组 网络通信过程中会发送大量的请求&#xff0c;每一个请求都需要通过IP数据包进行交互&#xff0c;但是IP数据包的头部信息过于复杂&#xff0c;如果通过IP数据包头进行数据包之间的区分就太复杂了&#xff0c;所以就产生了元组。 五元组是元组中的一种&am…

【pac文件】win10自动配置代理

目的 手动代理&#xff1a;所有地址经过代理&#xff0c;指定ip不经过代理 现在需求&#xff1a;实现指定ip范围才使用该代理 可以通过“自动设置代理”的方式实现 准备 已有代理地址&#xff0c;如&#xff1a;192.168.18.101:808有python环境 自动代理配置 编写sxProxy.…

实战PyQt5: 120-像素图QPixmap和QBitmap

Qt提供了四个用于处理图像数据的类&#xff1a;QImage&#xff0c;QPixmap&#xff0c;QBitmap和QPicture。QImage是为I/O设计的&#xff0c;并且针对直接的像素访问和操作做了优化&#xff0c;QPixmap是为在屏幕上显示图像而设计和优化的。QBitmap为继承自QPixmap的便利类。如…

Qt实战案例(54)——利用QPixmap设计图片透明度

目录 一、项目介绍二、项目基本配置三、UI界面设置四、主程序实现4.1 widget.h头文件4.2 widget.cpp源文件 五、效果演示 一、项目介绍 本文介绍利用QPixmap设计图片透明度&#xff0c;可以看到拖动下方进度条&#xff0c;用于控制上方图片的透明度。 二、项目基本配置 新建…