VS Code 是文本编辑器,本身不含编译器与调试器,C++ 能力来自扩展加上外部工具链;Visual Studio 是自带工具链的完整 IDE,其 C++ 部分(MSVC)不开源,本文不使用。本文采用的编译器是 GCC
先安装工具链,再把其 bin 目录加入 PATH,然后在 VS Code 中装好 C/C++ 扩展,即可编译、运行与调试
◆ MinGW-w64 与 MSYS2
GCC 是 GNU 的编译器集合,其中 gcc 编译 C、g++ 编译 C++、gdb 是配套调试器。MinGW-w64 把 GCC 与 Windows 的头文件、导入库组合,直接生成原生 Windows 可执行文件,运行不依赖额外兼容层。
MSYS2 是基于 Cygwin 的 POSIX 兼容层,加上 pacman 包管理器组成的 Windows 软件发行版。它提供多个子环境:MSYS 环境用于运行 shell 与构建脚本,其编译产物依赖 msys-2.0.dll;MINGW64、UCRT64、CLANG64 等环境里装的正是 MinGW-w64 工具链,产物为原生 Windows 程序。
因此两者不是同层的二选一:MinGW-w64 是编译器工具链,MSYS2 是提供包管理与多个工具链环境的发行版,其子环境里装的 g++ 就来自 MinGW-w64。另一条路线是直接使用独立的 MinGW-w64 发行包,解压即用,但没有包管理器,安装第三方库需要手动处理。
选择依据:需要安装第三方库、希望用一条命令升级编译器,选 MSYS2;只编译单个文件、不希望引入包管理器,选独立发行包。两条路线不要同时加进 PATH,同一发行版内也应固定使用一个子环境,避免链接到另一套运行时库。
◆ 安装 MSYS2
从官网 https://www.msys2.org/ 下载安装包,文件名形如 msys2-x86_64-日期.exe,运行后按向导安装,默认目录为 C:\msys64。安装路径避免中文与空格,部分构建脚本对其支持不佳。
安装完成后从开始菜单打开 MSYS2 UCRT64 终端,先更新整个系统:
pacman -Syu
pacman 是 MSYS2 的包管理器;-S 表示安装与同步,-y 刷新包索引,-u 升级已安装的包。首次更新涉及核心包,过程中会提示关闭终端,重开后再次执行一次 pacman -Syu,直到提示无更新。
接着安装 GCC,g++ 随该包一同装上:
pacman -S mingw-w64-ucrt-x86_64-gcc
包名由几段构成:mingw-w64 表示 MinGW-w64 工具链,ucrt 表示使用 Windows 系统自带的 UCRT 运行时,x86_64 表示 64 位;同为 64 位的 MINGW64 环境使用较旧的 msvcrt,其包名以 mingw-w64-x86_64- 开头,本文统一用 UCRT64。调试器 gdb 是单独的包,需要调试时再装:
pacman -S mingw-w64-ucrt-x86_64-gdb
gdb 与 g++ 同属该环境,位于同一 bin 目录。装完在本终端执行 g++ --version,输出末尾为 GCC 版本号,即为安装成功。pacman 中查包用 pacman -Ss 关键字,删包用 pacman -R 包名。
◆ 安装独立 MinGW-w64
独立发行包以压缩包形式发布,选择 UCRT 运行时的版本。从 winlibs 下载 .7z 或 .zip 包,.7z 需要 7-Zip 等工具,.zip 可用系统自带功能解开;另一来源是 SourceForge 上的 mingw-w64-builds 目录 https://sourceforge.net/projects/mingw-w64/files/。
解压到 C:\mingw64 一类不带中文与空格的目录,GCC、GDB 等程序位于其中的 bin 子目录。该路线不需要安装程序,升级方式是整目录替换;缺点是装第三方库要自行下载并处理头文件与库路径。
◆ 配置环境变量
两条路线当前都只在各自目录内可用;要让 g++ 在 VS Code 集成终端、cmd 与 PowerShell 中生效,需要把 bin 目录加入 PATH。
打开环境变量设置:右键"此电脑" → 属性 → 高级系统设置 → 环境变量;在"用户变量"中选中 Path,编辑 → 新建,填入 bin 目录的完整路径,逐页确定。
用户变量只对当前账户生效,不需要管理员权限;系统变量对本机所有账户生效。MSYS2 路线填 C:\msys64\ucrt64\bin,独立发行包路线填 C:\mingw64\bin。
PATH 是按顺序查找的目录列表,同名程序以靠前目录中的为准;同时保留多套工具链时,实际调用哪一个由顺序决定。修改后已打开的终端读不到新值,需要重新打开;VS Code 若先于修改启动,也需要重启才会在集成终端中生效。
◆ 验证
在 cmd 或 PowerShell 中执行:
g++ --version
正常输出第一行含 g++ 与发行信息,末尾为 GCC 版本号。提示 g++ 不是内部或外部命令,或 PowerShell 中提示无法识别该名称时,依次检查:加入的是否为 bin 目录本身、终端是否重新打开、条目是否建在 Path 变量内而不是新建了其他变量。
确认实际生效的可执行文件路径,cmd 用 where g++,PowerShell 用 Get-Command g++;输出多行时只看第一行,即当前调用到的那个。
◆ VS Code 配置
C/C++ 扩展
在扩展面板搜索 C/C++,安装 Microsoft 发布的那个(标识 ms-vscode.cpptools)。它提供语法高亮、补全、跳转与调试界面,不含编译器,实际编译仍由 PATH 中的 g++ 完成;扩展启动时会自动探测 PATH 中的编译器,探测不到时在命令面板执行 C/C++: Edit Configurations (UI) 手动指定编译器路径。
编译运行
新建一个文件夹,在 VS Code 中打开(文件 → 打开文件夹),新建 hello.cpp:
#include <iostream>
int main() {
std::cout << "hello" << std::endl;
return 0;
}
iostream 提供标准输入输出;main 是程序入口,返回 0 表示正常结束。在集成终端(终端 → 新建终端)中编译:
g++ hello.cpp -o hello.exe
-o 指定输出文件名,Windows 上后缀会自动补全,写成 -o hello 等价。随后运行:
.\hello.exe
PowerShell 中运行当前目录的程序需要 .\ 前缀。编译器报错时终端会给出文件名、行号与原因;把 exe 拷到别的机器提示缺少 libstdc++-6.dll 一类文件时,是运行时库未随之复制,可在编译时加 -static 把库打进 exe。源码含中文、输出乱码时,是终端编码与 UTF-8 不一致,先执行 chcp 65001 切到 UTF-8 再运行。
调试
在左侧运行和调试面板创建 launch.json,模板选 C++ (GDB/LLDB),配置后按 F5 启动调试,在编辑器行号左侧单击设置断点。该模板调用 PATH 中的 gdb;MSYS2 路线尚未安装时先装:
pacman -S mingw-w64-ucrt-x86_64-gdb
winlibs 独立发行包已自带 gdb,不需要这一步。微软为该套环境提供的官方教程在 https://code.visualstudio.com/docs/cpp/config-mingw。
◆ WSL2 路线
WSL2 内是完整的 Linux 环境,工具链用发行版自带的包管理器安装,如 Ubuntu 下执行 sudo apt install build-essential gdb;VS Code 通过 Remote-WSL 扩展连接到 WSL 内工作。该路线与本文的 Windows 原生工具链互不影响,可以并存。WSL2 的安装与配置见另一篇博客。
windows下vscode搭建c++环境
http://192.168.5.241:8090/archives/vscodeda-jian-c-huan-jing