我的电脑是Windows 11 系统,安装了Visual Studio Code,在上面搭建C/C++开发环境,当然,这需要用到MinGW之流了。作为一个绿色爱好者(帽子除外),我也尽量绿色地架设这样一个环境……
第一步:获取绿色免安装版的 MinGW-w64
MinGW-w64 是 MinGW 项目的一个分支,提供了更现代、更完整的 Windows API 支持,并且同时支持 32 位和 64 位开发。推荐使用它。
- 选择来源: 有几个地方可以下载预编译好的、免安装的 MinGW-w64 包。一个非常流行的、维护良好的来源是 winlibs.com。它直接提供 ZIP 压缩包,非常适合绿色版的需求。
- 访问 https://winlibs.com/
- 选择版本:
- 架构(Architecture): 选择
x86_64
(适用于 64 位 Windows 开发,现在是主流)。 - 线程模型(Thread model): 选择
posix
(通常兼容性更好)。 - 异常处理(Exception handling): 对于 64 位,选择
seh
(性能较好)。 - 构建类型(Build type): 通常选择最新的稳定版 GCC。你可以选择
Win64
下的 GCC + MinGW-w64 版本(UCRT 或 MSVCRT runtime)。UCRT 是较新的运行时,更接近 Windows 10/11 的标准 C 运行时,推荐使用。 - 下载格式: 选择
.zip
压缩包格式(例如without LLVM/Clang/LLD/LLDB
的那个,如果你只需要 GCC 工具链)。
- 架构(Architecture): 选择
- 解压 MinGW-w64:
- 下载完成后,将
.zip
文件解压到一个你选择的、路径不含中文或空格的位置。例如:C:\mingw64
D:\tools\mingw64
- 避免放在
C:\Program Files
或其他需要管理员权限的目录,也尽量避免放在路径过深的目录。
- 解压后,我们能看到一个类似
mingw64
的文件夹,里面包含bin
,include
,lib
,libexec
等子目录。核心的编译器 (gcc.exe, g++.exe) 和调试器 (gdb.exe) 都在bin
目录下。
- 下载完成后,将
第二步:配置环境变量 (推荐 VS Code 内配置,而非系统全局配置)
为了实现真正的“绿色”和环境隔离,最佳实践不是修改系统的 PATH 环境变量,而是在 VS Code 的工作区设置中直接指定编译器路径。这样不同的项目可以使用不同版本的编译器,且不会影响系统其他部分。我们将在后面的 VS Code 配置步骤中完成这一步。
- (可选,但不推荐用于纯绿色环境)修改系统 PATH: 如果你确实希望在任何命令行窗口都能直接使用
gcc
或g++
命令,可以手动将 MinGW-w64 的bin
目录添加到系统的 PATH 环境变量中。- 右键点击“此电脑” -> “属性”。
- 点击“高级系统设置”。
- 点击“环境变量”。
- 在“系统变量”或“用户变量”中找到
Path
变量,点击“编辑”。 - 点击“新建”,然后输入你解压的 MinGW-w64
bin
目录的完整路径(例如C:\mingw64\bin
)。 - 一路确定保存。需要重启 VS Code 或命令行窗口才能生效。
- 再次强调: 对于保持环境纯净和项目独立性,更推荐下面(第四步)的 VS Code 配置方法。
第三步:安装 VS Code 和 C/C++ 扩展
- 确保你已经安装了 Visual Studio Code。
- 打开 VS Code。
- 转到“扩展”视图(侧边栏图标,或按
Ctrl+Shift+X
)。 - 搜索
C/C++
。 - 找到由 Microsoft 发布的
C/C++
扩展(通常是第一个结果),点击“安装”。
第四步:创建和配置项目
-
创建项目文件夹: 在你喜欢的位置创建一个新的文件夹作为你的 C/C++ 项目目录,例如
D:\projects\HelloWorld
。 -
用 VS Code 打开文件夹: 在 VS Code 中,选择“文件”->“打开文件夹”,然后选择你刚创建的项目文件夹。
-
创建源文件: 在 VS Code 的文件浏览器中,右键点击空白处 -> “新建文件”,命名为
hello.cpp
(或者hello.c
如果你写 C 代码)。 -
编写示例代码:
// hello.cpp #include <iostream> #include <vector> #include <string>int main() {std::vector<std::string> msg {"Hello", "C++", "World", "from", "VS Code", "and", "MinGW-w64!"};for (const std::string& word : msg) {std::cout << word << " ";}std::cout << std::endl;std::cout << "GCC version: " << __VERSION__ << std::endl; // 输出 GCC 版本return 0; }
或者 C 语言版本 (
hello.c
):// hello.c #include <stdio.h>int main() {printf("Hello, C World from VS Code and MinGW-w64!\n");printf("GCC version: %s\n", __VERSION__); // 输出 GCC 版本return 0; }
-
配置 VS Code 工作区设置: 这是关键步骤,让 VS Code 知道你的编译器在哪里,以及如何构建和调试。
- 按
Ctrl+Shift+P
打开命令面板,输入C/C++: Edit Configurations (UI)
并回车。 - 这会在项目文件夹下创建一个
.vscode
子目录,并在其中生成c_cpp_properties.json
文件。 - 在打开的 UI 界面或直接编辑
c_cpp_properties.json
文件,进行以下关键配置:- 编译器路径 (Compiler path): 这是最重要的设置。点击下拉菜单,如果 VS Code 没有自动检测到你的 MinGW-w64 (因为它不在系统 PATH 里),你需要手动指定。选择“输入路径…”或直接编辑 JSON 文件,将其设置为你的
g++.exe
(用于 C++) 或gcc.exe
(用于 C) 的完整路径。例如:// 对于 C++ "compilerPath": "C:/mingw64/bin/g++.exe", // 注意:路径分隔符用正斜杠 '/' // 对于 C // "compilerPath": "C:/mingw64/bin/gcc.exe",
- IntelliSense 模式 (IntelliSense mode): 根据你的编译器和目标平台选择。对于 MinGW-w64 64位,通常选择
windows-gcc-x64
。VS Code 通常会根据compilerPath
自动推断。 - 包含路径 (Include path): 通常
${workspaceFolder}/**
就足够了。如果你的项目依赖外部库,需要在这里添加库的include
目录。对于标准库,编译器会自动查找,通常不需要手动添加 MinGW-w64 的include
目录,除非 IntelliSense 遇到问题。 - C 标准 / C++ 标准 (C Standard / C++ Standard): 选择你希望使用的 C 或 C++ 标准,例如
c17
或c++17
,c++20
。
- 编译器路径 (Compiler path): 这是最重要的设置。点击下拉菜单,如果 VS Code 没有自动检测到你的 MinGW-w64 (因为它不在系统 PATH 里),你需要手动指定。选择“输入路径…”或直接编辑 JSON 文件,将其设置为你的
最终的
c_cpp_properties.json
文件可能看起来像这样:{"configurations": [{"name": "Win32", // 这个名字可以自定义"includePath": ["${workspaceFolder}/**"// 如果需要,可以添加 MinGW 的 include 路径,但通常编译器路径设置好后就够了// "C:/mingw64/include/**",// "C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/**" // 替换成你的实际版本号],"defines": ["_DEBUG","UNICODE","_UNICODE"],"compilerPath": "D:/tools/mingw64/bin/g++.exe", // 确保这是你 g++.exe 的正确路径"cStandard": "c17","cppStandard": "c++17", // 或 c++20 等"intelliSenseMode": "windows-gcc-x64"}],"version": 4 }
- 按
-
配置构建任务 (tasks.json):
- 按
Ctrl+Shift+P
,输入Tasks: Configure Default Build Task
并回车。 - 选择
C/C++: g++.exe build active file
(或gcc.exe
如果用 C)。 - 这会在
.vscode
目录下创建tasks.json
文件。 - 检查生成的
tasks.json
文件。确保command
指向了正确的编译器路径(通常它会从c_cpp_properties.json
推断,但检查一下没坏处)。可以添加-g
参数以包含调试信息,并用-Wall -Wextra
打开更多警告。
一个示例
tasks.json
:{"version": "2.0.0","tasks": [{"type": "cppbuild", // 或 "shell""label": "C/C++: g++.exe build active file", // 任务标签,可以自定义"command": "C:/mingw64/bin/g++.exe", // 确认编译器路径"args": ["-fdiagnostics-color=always", // 彩色输出错误信息"-g", // 生成调试信息"${file}", // 当前活动文件"-o", // 输出文件选项"${fileDirname}\\${fileBasenameNoExtension}.exe" // 输出的可执行文件路径和名称// 可以添加更多编译选项,如:// "-Wall", // 打开常用警告// "-Wextra", // 打开额外警告// "-std=c++17" // 明确指定 C++ 标准],"options": {"cwd": "${fileDirname}" // 设置工作目录为文件所在目录},"problemMatcher": ["$gcc" // 使用 GCC 的问题匹配器,高亮错误和警告],"group": {"kind": "build","isDefault": true // 设置为默认构建任务 (按 Ctrl+Shift+B 触发)},"detail": "compiler: C:/mingw64/bin/g++.exe" // 任务描述}] }
- 按
-
配置调试器 (launch.json):
- 切换到“运行和调试”视图(侧边栏带虫子的播放按钮图标,或按
Ctrl+Shift+D
)。 - 点击“创建 launch.json 文件”。
- 在弹出的选择环境菜单中,选择
C++ (GDB/LLDB)
。 - 然后选择
g++.exe build and debug active file
(或者类似,它会尝试自动生成)。 - 这会在
.vscode
目录下创建launch.json
文件。 - 关键配置:
program
: 确保它指向由构建任务生成的可执行文件的路径,通常是"${fileDirname}\\${fileBasenameNoExtension}.exe"
。miDebuggerPath
: 非常重要,将其设置为你的 MinGW-w64bin
目录下的gdb.exe
的完整路径。例如:"miDebuggerPath": "C:/mingw64/bin/gdb.exe"
。preLaunchTask
: 确保它设置为你在tasks.json
中定义的构建任务的label
,这样每次调试前都会自动重新编译。例如"preLaunchTask": "C/C++: g++.exe build active file"
。
一个示例
launch.json
:{"version": "0.2.0","configurations": [{"name": "(gdb) Launch", // 配置名称,可以自定义"type": "cppdbg","request": "launch","program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 要调试的程序"args": [], // 传递给程序的命令行参数"stopAtEntry": false, // 是否在 main 函数入口处暂停"cwd": "${fileDirname}", // 设置工作目录"environment": [],"externalConsole": true, // 是否使用外部控制台窗口显示程序输出 (推荐 true)"MIMode": "gdb","miDebuggerPath": "D:/tools/mingw64/bin/gdb.exe", // GDB 调试器路径,务必正确"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "Set Disassembly Flavor to Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "C/C++: g++.exe build active file" // 调试前运行的构建任务标签}] }
- 切换到“运行和调试”视图(侧边栏带虫子的播放按钮图标,或按
第五步:构建、运行和调试
- 构建 (编译):
- 确保你的源文件 (
hello.cpp
或hello.c
) 是当前活动文件。 - 按
Ctrl+Shift+B
(或者通过菜单“终端”->“运行生成任务…”) 来执行默认的构建任务。 - 查看 VS Code 下方的“终端”面板,应该会显示编译过程。如果没有错误,你会在源文件同目录下看到生成的可执行文件 (
hello.exe
)。
- 确保你的源文件 (
- 运行 (不调试):
- 按
Ctrl+F5
(或者通过菜单“运行”->“启动执行(不调试)”)。 - 如果
externalConsole
设置为true
,会弹出一个新的命令行窗口显示程序输出。如果为false
,输出会显示在 VS Code 的“调试控制台”面板。
- 按
- 调试:
- 在代码中设置断点:在行号左侧单击即可。
- 按
F5
(或者通过菜单“运行”->“启动调试”)。 - 程序会在第一个断点处暂停。你可以使用调试工具栏(通常在 VS Code 顶部)进行单步执行 (F10, F11)、查看变量、查看调用堆栈等操作。
总结:
- 使用 MinGW-w64 (UCRT 版本优先): 提供更好的 Windows API 支持和 C++ 标准支持。
- 保持 MinGW-w64 绿色免安装: 将其解压到独立、路径简单的文件夹,不要运行安装程序(如果你下载的是安装版)。
- 优先使用 VS Code 工作区配置 (.vscode 文件夹): 在
c_cpp_properties.json
,tasks.json
,launch.json
中直接指定编译器和调试器路径,而不是修改全局系统 PATH。这使得项目环境自包含、易于管理和分享,且不影响系统。 - 使用
.vscode
文件夹管理配置: 将构建和调试配置与项目代码放在一起。 - 启用编译器警告: 在
tasks.json
的编译参数中加入-Wall -Wextra
,帮助发现潜在问题。 - 编译时包含调试信息: 使用
-g
参数,这样 GDB 才能有效地进行源码级调试。 - 使用版本控制: 使用 Git 等工具管理你的代码和
.vscode
配置文件。 - 对于大型项目,考虑使用构建系统: CMake 或 Meson 是跨平台的现代 C++ 构建系统,可以更方便地管理复杂的项目依赖和编译过程。VS Code 有很好的 CMake Tools 扩展。
- 保持工具链更新: 定期检查 winlibs.com 或其他来源,更新你的 MinGW-w64 到较新版本以获得 bug 修复和新特性。由于是绿色版,更新通常只需要下载新版 ZIP 包,解压替换旧的即可(注意更新
.vscode
配置文件中的路径或版本号,如果需要)。
遵循这些步骤和实践,我算是在 Windows 11 上搭建了一个干净、强大且易于管理的 C/C++ 开发环境。当然后续还有各种问题,我将在后续的文章中分享。