我的電腦是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++ 開發環境。當然后續還有各種問題,我將在后續的文章中分享。