Skip to content

VS Code 配置 C/C++ 编程运行环境

1.MinGW-64

1.1 什么是MinGW-64

MINGW64 的全称是 Minimalist GNU for Windows 64-bit,其主要目标是提供一个最小化的、可以运行 GNU 工具链的 Windows 环境。它包括了许多常见的 GNU 工具和库,如 GCC、G++、GDB(GNU Debugger,GNU 调试器)等,以及一个 Windows 兼容的 POSIX API 实现。这些工具允许开发者在 Windows 上编写、编

1.2 下载MinGW-64

1.2.1 官网下载二进制文件

MinGW-64的官方github地址:Releases · niXman/mingw-builds-binaries

下面演示如何从官网找到该地址,首先进入官网:mingw-w64

点击DownloadsPre-built ToolchainsMinGW-W64-buildsimage-20260630152054229

会自动往下跳转到github的地址,点击跳转

image-20260630152323991

到了github之后发现有很多款式,不指定该怎么选

我们选最后一个就行

image-20260630152507747

以上部分说明

  • 13.2.0:是GCC的版本号; 目标操作系统和API风格
  • 32:位的操作系统,选择i68664位的操作系统,选择x86_64
  • posix:这是为类Unix系统(如LinuxmacOS)设计的API风格。如果你的程序需要在这些系统上运行,或者你的代码依赖于POSIX API,你应该选择带有posix的工具链。
  • win32:这是为Windows系统设计的API风格。如果你的程序主要面向Windows用户,或者你的代码依赖于Windows特有的API,你应该选择带有win32的工具链。 异常处理机制
  • sjlj:表示这个工具链使用“Setjmp/Longjmp”异常处理机制。SJLJ是一种更传统的异常处理方式,它通常用于那些不支持或不完全支持Windows结构化异常处理(SEH)的操作系统。
  • seh:表示这个工具链使用Windows的结构化异常处理(Structured Exception Handling, SEH)。SEHWindows平台上常用的异常处理机制,它提供了更丰富的异常信息和更灵活的异常处理逻辑。如果你的代码需要与Windows平台的特性紧密集成,或者你的程序主要运行在Windows上,SEH可能是一个更好的选择。
  • ucrt:是Universal C Runtime的缩写,它是Windows 10及更高版本中包含的一个新运行时库。它提供了与操作系统更紧密集成的API,并通常用于更现代的Windows应用程序。 如果你的目标平台是Windows 10或更高版本,并且你希望利用最新的API和功能,ucrt可能是一个好选择。 使用ucrt的库通常比使用msvcrt的库更小,因为它们不包含一些旧的、不再需要的API
  • msvcrt:是Microsoft C Runtime的缩写,它是Microsoft提供的传统C运行时库。 它提供了广泛的API支持,包括一些旧的、可能不再常用的API。 如果你的代码依赖于msvcrt特有的API,或者你需要确保你的程序能在较旧的Windows版本上运行,msvcrt可能更适合你。
  • rt_v11:,通常指的是“runtime”,即运行时库版本号。
  • .7z:这是文件的压缩格式。.7z7-Zip压缩工具使用的文件格式。它表示文件已经被压缩,以减小文件大小,方便下载和存储。要使用文件中的内容,用户通常需要使用7-Zip或其他兼容的压缩工具来解压缩文件。

1.2.2 解压

下载完之后找一个合适,并且记得住的地方解压

比如我在D盘下新建了一各environment的文件夹,放在里

image-20260630152954955

1.3 配置环境变量

按键盘Win键,搜索环境变量,找到编辑系统环境变量并打开

image-20260630153435676

点击环境变量

image-20260630153526606

找到Path双击打开

image-20260630153556145

接下来有两种方法配置环境变量,新手任选其一即可,老手。。。老手应该早都会了,还看个蛋

1.3.1 方法一

找到刚才我们mingw-64文件夹的路径,并找到bin目录

直接将地址栏的目录复制

image-20260630153710475

然后回到刚才编辑环境变量的窗口,点击新建按钮,然后把路径复制到新建的那一行

image-20260630154150138

然后确定三连

image-20260630154140131

TIP

这种方法步骤少,简单直观对初学者最省事

但是也有缺点

  • 路径硬编码,换安装目录或升级版本要改 Path
  • Path 里一堆绝对路径,不易辨认是哪个软件
  • 某些构建脚本 / IDE(如 CMake、Qt Creator、某些 Makefile)会主动读取 MINGW_HOME/ MINGW64_HOME,找不到可能要多配

这是ai说的,我管你这那的

1.3.2 方法二

依然是在环境变量这一步,注意是第二个窗口,点击新建按钮

  1. 然后顶一个变量名,按照常规管理,环境变量名都以XXX_HOME这样的格式命名
  2. 那我们就命名为MinGW_HOME
  3. 然后把mingw64文件夹的路径复制到变量值一行,注意这次不是bin目录

image-20260630154449302

添加完变量后,点击确定

image-20260630154714000

此时看到用户变量一栏已经有我们刚才创建的变量了

image-20260630154756262

接下来依然是找到Path并打开

image-20260630154822190

点击新建,填入%MinGW_HOME%

image-20260630154909282

然后依然是确定三连

image-20260630154946127

1.4 验证环境变量

win+x->a,打开终端PowerShell,分别输入以下指令然后回车

bash
gcc --version
g++ --version
gdb --version

image-20260630155142858

结果和截图差不多就行,若报错了,再仔细从头看一遍看哪里错了

TIP

gccGNU Compiler Collection(GNU 编译器套件):是一个编译器集合,在这里的主要作用是把c源代码编译成可执行程序

g++:用于编译 C++

gdb:用来调试程序可以:

  • 单步执行
  • 设置断点
  • 查看变量值
  • 查看函数调用栈
  • 分析程序崩溃(core dump)

2.MSYS2

MinGW-64官网中,如果我们往下看,可以看到除了MinGW-64github地址,还有MSYS2w64devkit

image-20260630155716035

那么这都是什么东西呢

  • MinGW-w64:编译器工具链(项目本身)
    • MinGW-w64 是一个开源项目,提供 Windows 平台的 GNU 工具链头文件、导入库和运行时,让 GCC/Clang 能在 Windows 上编译出原生 Windows 程序(.exe,不依赖 Cygwin DLL),支持 32 位和 64 位
  • w64devkit:MinGW-w64 的极简便携发行版
    • w64devkit(由 skeeto 维护)是一个精心打包好的 MinGW-w64 + GCC 工具链压缩包,解压即用:
      • 内含:MinGW-w64 GCC(gcc/g++)、GDB、GNU Make、busybox(提供 sh/ls 等 Unix 命令)、Vim、Ccache
      • 零安装:绿色软件,不写注册表,删文件夹即卸载
      • 适合:快速搭环境编译 C/C++、CI 构建、U盘随身携带
  • MSYS2:带包管理器的类 Unix 开发平台
    • 提供 bash shell、git、autotools 等 Unix 工具
    • 通过 pacman一键安装/更新 GCC、Clang、CMake、FFmpeg、OpenSSL 等数千个包
    • 包含多个子环境(可共存):
      • UCRT64(推荐新项目):x86_64 + UCRT + GCC
      • MINGW64/MINGW32:传统 MSVCRT 运行时
      • CLANG64:Clang 编译器
      • MSYS:运行依赖 msys-2.0.dll 的 Unix 工具(用于构建脚本,不用于最终程序)

这些屁话看不看无所谓,反正使用vscode开发c/c++,MinGW-64MSYS2w64devkit其中各选其一即可

那么接下来就是如何下载MSYS2

2.1 下载MSYS2

进入官网:MSYS2

直接可以看到下载按钮,直接点击下载

image-20260630160516700

或者直接来到github的release来一顿酣畅淋漓的下载:https://github.com/msys2/msys2-installer/releases/

image-20260630161021774

下载之后图标是这样的

image-20260630161043350

我们直接打开安装

点击Next

image-20260630161123921

选择安装目录,我还是放在了D盘的environment下,然后点击next

这个路径也要记住,待会要找

image-20260630161215145

继续下一步

image-20260630161427053

然后等待下载

image-20260630161440176

勾选Run MSYS2 now,应该是默认勾选

然后点finish

image-20260630161745660

接下来会自动打开一个终端页面,运行如下指令

bash
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

出现这个界面,直接按回车键,默认接受所有的安装包。

image-20260630162351984

然后输入y并回车

image-20260630162429957

等所有都下载完毕后,就可以关闭窗口了

image-20260630162809067

2.2 配置环境变量

找到我们刚才安装的目录,然后进入ucrt64->bin

image-20260630163041975

接下来就是跟上面一样了[方法一](#1.3.1 方法一)

或者走到bin的上一级走[方法二](#1.3.2 方法二)

image-20260630163256076

之后依然是走验证[验证环境变量](#1.4 验证环境变量)

3.w64devkit

w64devkit 的意思是:Windowsx64/x86的dev(开发)kit(工具)包,工具包中包含了下面9个工具。

  • mingw-w64 GcC :compilers, 1inker, assemblerGDB : debugger
  • GNU Make : standard build tool
  • CMake with Ninja: build system
  • busybox-w32 : standard unix utilities, including sh
  • Vim: powerful text editor Universal ctags : source navigation Ccache:compiler cache

直接来到github下载页面:Releases · skeeto/w64devkit

选择带x64的下载

image-20260630164412630

下载好的图标长这样,直接双击打开安装

image-20260630164451594

选择安装目录,点击Extract

image-20260630164623807

4.下载VsCode插件

主要下载两个插件

image-20260630222940429

  • C/C++:C/C++最基础的扩展,提供语法高亮、代码补全等功能
  • C/C++ Extension Pack
    • 语法高亮:通过C/C++ Themes插件,可以使代码具有更易于阅读的颜色主题,提高代码的可读性。
    • 代码补全:C/C++插件提供了智能的代码补全功能,可以根据上下文自动补全代码,加快编码速度。
    • 代码调试:集成了调试工具,允许开发者在VSCode中直接进行代码调试,提高了调试效率。
    • CMake支持:CMake和CMake Tools插件为使用CMake构建系统的项目提供了便捷的支持。
    • 改进的C++语法:Better C++ Syntax插件提供了更好的C++语法支持,使得语法高亮和代码格式化更加准确。

5.单文件运行

创建一个项目文件夹,比如cpp_test,然后在根目录创建一个c++文件,我创建了一个app.cpp

写点简单的内容

c++
#include <iostream>
using namespace std;
int main(){
	cout << "hello world";
	return 0;
}

注意

若出现以下报错

image-20260702213544956

在环境变量没有配置错误的情况下,就是vscode还没有反应过来你已经配置了环境变量

重启Vscode就行

5.1 指令运行

在终端中输入如下指令

bash
g++ ./app.cpp -o ./app.exe

会发现目录中多了一个app.exe,这是编译出来的二进制可执行文件

然后再在终端中输入如下指令,运行app.exe

bash
./app.exe

可以看到运行的结果

image-20260630224708482

以上指令也可以压缩为一条,编译后就运行

bash
g++ ./app.cpp -o ./app.exe ; ./app.exe

效果一样

image-20260630224753997

5.2 插件自动执行

输入指令太麻烦,还是使用插件功能得劲,以下功能来自于C/C++ Extension Pack插件

点击右上角的运行按钮,点击运行C/C++文件

image-20260630223255833

然后在弹出的窗口中选择........g++.exe........,因为我们写的时c++文件,如果是c,就选第一个gcc

image-20260630223350400

运行结果

image-20260630223454274

并且发现项目目录下多了些东西

image-20260630223513055

.vscode/tasks.json这个是选择g++编译器后生成的,主要作用是:

  • 用哪个编译器(g++/ cl.exe
  • 编译哪个 .cpp文件
  • 输出到哪里(-o xxx.exe
  • 加哪些参数(-g -std=c++17等)

本质上就是把你在终端手敲的 g++ main.cpp -o main.exe固化成了配置文件

通常同目录下还会有 launch.json(告诉调试器怎么启动 .exe),都属于 .vscode/工作区配置,建议保留,删了下次 F5 又要重新配置(ai说的,我觉得有道理)

xxx.exe:这个是程序编译后生成的二进制可执行文件,最后执行就是运行的这个文件,它的命名一般默认是跟cpp名字一样

6.多文件运行

我们先创建两个文件

:::code -group

c++
#include <iostream>
using namespace std;

void helloWorld();

int main(){
	helloWorld();
	return 0;
}
c++
#include <iostream>
using namespace std;

void helloWorld(){
	cout << "hello world1111";
}

:::

可以看到,主函数在app.cpp里,并且调用了test.cpp里的helloWorld()函数

依然输入指令运行

bash
g++ ./app.cpp -o app.exe

毫无疑问会出错

image-20260702214920771

然后我们使用插件来运行

image-20260702215016782

卧槽,还是报错

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈操

为什么为什么为什么

因为:c嘎嘎并不会自动在项目目录中寻找其他文件的可用资源,只有你暗箱操作一番,才行

先来了解以下c++从编译到运行的大致过程

f90645121fcae686a4e803ca20a40c21

那么可以看到,cpp文件会先编译成二进制的app.o,然后再生成app.exe可执行文件

但是如果我们是多文件那么就会是这样

1f6220f2cc6067f6cf27f1e655196e28

那么可以看到,两个cpp文件在分别编译成二进制.o文件后,需要先链接以下,再生成exe文件

想要链接多个文件,就得输入这样的指令

rust
g++ ./app.cpp ./test.cpp -o app.exe

可以看到,在./app.cpp的后面又添加了一个./test.cpp,如果还有更多的文件,就还在后面继续加

之后便可编译成功,最后看到我们的app.exe,执行便可得到结果

然后再使用我们的插件执行一下......又报错了

image-20260702220531660

因为啊插件是依靠.vscode/tasks.json运行的,打开我们可以看到args于我们输入的指令貌似有点相似,那么懂js的都知道${}是字符串中使用变量,还有-o啊,.exe啊,还真是有点熟悉

image-20260702220650566

${file}就是变量,你当前处于哪个文件,他就只会运行哪个文件

上面也说了c++不会在项目目录下去寻找别的文件中的资源

所以,我们要对这个.vscode/tasks.json进行一些更改

json
"args": [
    "-fdiagnostics-color=always",
    "-g",
    "app.cpp",
    "test.cpp",
    "-o",
    "${fileDirname}\\${fileBasenameNoExtension}.exe"
],

${file}换成app.cpptest.cpp这两个文件名,再执行就可以了

但是如果以后文件变得很多很多,那总不能一个一个加把

json
"args": [
    "-fdiagnostics-color=always",
    "-g",
    "*.cpp",
    "-o",
    "${fileDirname}\\${fileBasenameNoExtension}.exe"
],

改成这样就行,*通配符匹配所有cpp文件

6.解决乱码问题

当我们在程序中用到中文时,程序执行后中文会变成乱码

就像这样

image-20260630215339127

6.1 查看编码格式

6.1.1 编译器编码格式

首先我们来看编译器中代码的编码格式

只要找到编译器右下角,看到有GBK或者UTF-8的字样,这就是编译器中代码的编码格式

很明显,此时我的代码编码格式是GBK

image-20260630215540679

6.1.2 终端编码格式

在终端中输入如下指令

bash
chcp

image-20260630215729202

可以看到Active code page: 65001,那么65001就是UTF-8的字符编码编号

对应的GBK字符编码编号是936

6.2 乱码原因

乱码产生的主要原因是,终端的编码格式和编译器代码的编码格式不一样

有以下四种情况

代码编码方式终端编码方式是否统一
GBKGBK统一
UTF-8UFT-8统一
GBKUFT-8不统一
UTF-8GBK不统一

所以,想要程序执行不乱码,只要代码编码方式和终端编码方式统一就行

不管是统一为UTF-8还是统一为GBK

不过UTF-8是国际通用的字符编码格式,还是推荐UTF-8

GBKUTF-8

UTF-8

  • 优点:
    • 国际通用支持所有语言、emoj、特殊符号,避免乱码。
    • 跨平台:Linux、macOS、Web、现代编程语言默认都使用UTF-8。
    • 未来兼容:Windows10/11已逐步将UTF-8设为系统默认(需开启Beta功能)。
    • 无编码冲突:比如JSON、XML、HTML推荐用UTF-8,GBK可能导致解析错误。
  • 缺点:主要在旧版Windows命令行时
    • 少数老Windows工具(如find、sort)在代码页65001下可能行为异常。
    • 某些仅支持ANSI的老程序(如用C标准/O未处理Unicode的)输出会乱码。

GBK

  • 优点
    • 与简体中文Windows原生ANSI完美兼容(记事本保存为ANSI就是GBK)。
    • 某些老行业软件(银行、税务、政府旧系统)强制要求GBK.
    • Windows命令行中老工具运行最稳定。
  • 缺点
    • 不是国际标准,其他系统默认不识别
    • 无法表示生僻字、emoji、多语言混合文本。
    • 跨平台传输(比如代码上传到Git)容易变成乱码。

6.3 统一编码格式

6.3.1 修改编译器编码格式

点击编译器右下角的编码格式

会在上面弹出一个框,选择通过编码重新打开

image-20260630221004738

之后在新弹出的窗口找到你想统一的编码格式,如UTF-8

image-20260630221038239

这样就改好了

image-20260630221138472

6.3.2 修改终端编码格式

修改终端编码格式需要在电脑的设置里修改

打开电脑设置,win+i快捷键可直接打开

点击时间和语言→语言和区域

image-20260630221328511

往下滑找到管理语言设置打开

image-20260630221428015

点击更改系统区域设置

勾选Beta版:....UniCode UTf-8......

然后确定

确定之后,会让你系统重启,重启之后就可以了

image-20260630221457934

之后再执行,就不会乱码了

image-20260630221633088

MIT Licensed