Windows 11 VS Code C/C++ 開發環境搭建——一種盡量“綠色”的方法

我的電腦是Windows 11 系統,安裝了Visual Studio Code,在上面搭建C/C++開發環境,當然,這需要用到MinGW之流了。作為一個綠色愛好者(帽子除外),我也盡量綠色地架設這樣一個環境……

第一步:獲取綠色免安裝版的 MinGW-w64

MinGW-w64 是 MinGW 項目的一個分支,提供了更現代、更完整的 Windows API 支持,并且同時支持 32 位和 64 位開發。推薦使用它。

  1. 選擇來源: 有幾個地方可以下載預編譯好的、免安裝的 MinGW-w64 包。一個非常流行的、維護良好的來源是 winlibs.com。它直接提供 ZIP 壓縮包,非常適合綠色版的需求。
    • 訪問 https://winlibs.com/
  2. 選擇版本:
    • 架構(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 工具鏈)。
  3. 解壓 MinGW-w64:
    • 下載完成后,將 .zip 文件解壓到一個你選擇的、路徑不含中文或空格的位置。例如:
      • C:\mingw64
      • D:\tools\mingw64
      • 避免放在 C:\Program Files 或其他需要管理員權限的目錄,也盡量避免放在路徑過深的目錄。
    • 解壓后,我們能看到一個類似 mingw64 的文件夾,里面包含 bin, include, lib, libexec 等子目錄。核心的編譯器 (gcc.exe, g++.exe) 和調試器 (gdb.exe) 都在 bin 目錄下。
      MinGW目錄

第二步:配置環境變量 (推薦 VS Code 內配置,而非系統全局配置)

為了實現真正的“綠色”和環境隔離,最佳實踐不是修改系統的 PATH 環境變量,而是在 VS Code 的工作區設置中直接指定編譯器路徑。這樣不同的項目可以使用不同版本的編譯器,且不會影響系統其他部分。我們將在后面的 VS Code 配置步驟中完成這一步。

  • (可選,但不推薦用于純綠色環境)修改系統 PATH: 如果你確實希望在任何命令行窗口都能直接使用 gccg++ 命令,可以手動將 MinGW-w64 的 bin 目錄添加到系統的 PATH 環境變量中。
    1. 右鍵點擊“此電腦” -> “屬性”。
    2. 點擊“高級系統設置”。
    3. 點擊“環境變量”。
    4. 在“系統變量”或“用戶變量”中找到 Path 變量,點擊“編輯”。
    5. 點擊“新建”,然后輸入你解壓的 MinGW-w64 bin 目錄的完整路徑(例如 C:\mingw64\bin)。
    6. 一路確定保存。需要重啟 VS Code 或命令行窗口才能生效。
    • 再次強調: 對于保持環境純凈和項目獨立性,更推薦下面(第四步)的 VS Code 配置方法。

第三步:安裝 VS Code 和 C/C++ 擴展

  1. 確保你已經安裝了 Visual Studio Code。
  2. 打開 VS Code。
  3. 轉到“擴展”視圖(側邊欄圖標,或按 Ctrl+Shift+X)。
  4. 搜索 C/C++
  5. 找到由 Microsoft 發布的 C/C++ 擴展(通常是第一個結果),點擊“安裝”。

第四步:創建和配置項目

  1. 創建項目文件夾: 在你喜歡的位置創建一個新的文件夾作為你的 C/C++ 項目目錄,例如 D:\projects\HelloWorld

  2. 用 VS Code 打開文件夾: 在 VS Code 中,選擇“文件”->“打開文件夾”,然后選擇你剛創建的項目文件夾。

  3. 創建源文件: 在 VS Code 的文件瀏覽器中,右鍵點擊空白處 -> “新建文件”,命名為 hello.cpp (或者 hello.c 如果你寫 C 代碼)。

  4. 編寫示例代碼:

    // 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;
    }
    
  5. 配置 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++ 標準,例如 c17c++17, c++20

    最終的 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
    }
    
  6. 配置構建任務 (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" // 任務描述}]
    }
    
  7. 配置調試器 (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-w64 bin 目錄下的 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" // 調試前運行的構建任務標簽}]
    }
    

第五步:構建、運行和調試

  1. 構建 (編譯):
    • 確保你的源文件 (hello.cpphello.c) 是當前活動文件。
    • Ctrl+Shift+B (或者通過菜單“終端”->“運行生成任務…”) 來執行默認的構建任務。
    • 查看 VS Code 下方的“終端”面板,應該會顯示編譯過程。如果沒有錯誤,你會在源文件同目錄下看到生成的可執行文件 (hello.exe)。
  2. 運行 (不調試):
    • Ctrl+F5 (或者通過菜單“運行”->“啟動執行(不調試)”)。
    • 如果 externalConsole 設置為 true,會彈出一個新的命令行窗口顯示程序輸出。如果為 false,輸出會顯示在 VS Code 的“調試控制臺”面板。
  3. 調試:
    • 在代碼中設置斷點:在行號左側單擊即可。
    • F5 (或者通過菜單“運行”->“啟動調試”)。
    • 程序會在第一個斷點處暫停。你可以使用調試工具欄(通常在 VS Code 頂部)進行單步執行 (F10, F11)、查看變量、查看調用堆棧等操作。

總結:

  1. 使用 MinGW-w64 (UCRT 版本優先): 提供更好的 Windows API 支持和 C++ 標準支持。
  2. 保持 MinGW-w64 綠色免安裝: 將其解壓到獨立、路徑簡單的文件夾,不要運行安裝程序(如果你下載的是安裝版)。
  3. 優先使用 VS Code 工作區配置 (.vscode 文件夾):c_cpp_properties.json, tasks.json, launch.json 中直接指定編譯器和調試器路徑,而不是修改全局系統 PATH。這使得項目環境自包含、易于管理和分享,且不影響系統。
  4. 使用 .vscode 文件夾管理配置: 將構建和調試配置與項目代碼放在一起。
  5. 啟用編譯器警告:tasks.json 的編譯參數中加入 -Wall -Wextra,幫助發現潛在問題。
  6. 編譯時包含調試信息: 使用 -g 參數,這樣 GDB 才能有效地進行源碼級調試。
  7. 使用版本控制: 使用 Git 等工具管理你的代碼和 .vscode 配置文件。
  8. 對于大型項目,考慮使用構建系統: CMake 或 Meson 是跨平臺的現代 C++ 構建系統,可以更方便地管理復雜的項目依賴和編譯過程。VS Code 有很好的 CMake Tools 擴展。
  9. 保持工具鏈更新: 定期檢查 winlibs.com 或其他來源,更新你的 MinGW-w64 到較新版本以獲得 bug 修復和新特性。由于是綠色版,更新通常只需要下載新版 ZIP 包,解壓替換舊的即可(注意更新 .vscode 配置文件中的路徑或版本號,如果需要)。

遵循這些步驟和實踐,我算是在 Windows 11 上搭建了一個干凈、強大且易于管理的 C/C++ 開發環境。當然后續還有各種問題,我將在后續的文章中分享。

運行效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/74040.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/74040.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/74040.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql-分區和性能

mysql自身只支持表的橫向分區。 常聽到開發人員說“”對表做個分區“&#xff0c;然后數據的查詢就會快了。這是真的嗎&#xff1f;實際上可能跟根本感覺不到查詢速度的提升&#xff0c;甚至會發現查詢速度急劇下降。因此&#xff0c;在合理使用分區之前&#xff0c;必須了解分…

DeepSeek協助優化-GTX750Ti文物顯卡0.65秒卷完400MB float 音頻512階時域FIR

文章目錄 1. 學習目的2. 階段成果2.1 NVVP 性能探查2.2 測試編譯環境2.3 測試樣例 3 學習過程3.1 提問DeepSeek3.2 最終代碼 4. 體會 1. 學習目的 最近在學習cuda&#xff0c;準備給我的taskBus SDR添加CUDA的模塊支持&#xff0c;以便可以用PC機壓榨山寨 B210那56M的帶寬。 因…

RabbitMQ高級特性--TTL和死信隊列

目錄 1.TTL 1.1設置消息的TTL 1.1.1配置交換機&隊列 1.1.2發送消息 1.1.3運行程序觀察結果 1.2設置隊列的TTL 1.2.1配置隊列和交換機的綁定關系 1.2.2發送消息 1.2.3運行程序觀察結果 1.3兩者區別 2.死信隊列 2.1 聲名隊列和交換機 2.2正常隊列綁定死信交換機 …

【JavaEE】UDP數據報套接字編程

目錄 網絡編程基礎 基本概念 發送端和接收端 請求和響應 客戶端和服務端 常見的客戶端服務端模型 Socket套接字 TCP/UDP特點 Java數據報套接字通信模型(UDP通信) UDP數據報套接字編程 DatagramSocket 1.類定義 2.構造方法 3.核心方法 4.特性說明 DatagramPacke…

Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 實現項目接口文檔管理

在現代企業級應用開發中&#xff0c;前后端分離已成為主流模式&#xff0c;前端負責界面呈現&#xff0c;后端專注提供 RESTful API 接口。然而&#xff0c;接口文檔的編寫和維護往往是開發過程中的痛點。Spring Boot 3.4.3 結合 SpringDoc 2 和 Swagger 3&#xff0c;為開發者…

構建大語言模型應用:數據準備(第二部分)

本專欄通過檢索增強生成&#xff08;RAG&#xff09;應用的視角來學習大語言模型&#xff08;LLM&#xff09;。 本系列文章 簡介數據準備&#xff08;本文&#xff09;句子轉換器向量數據庫搜索與檢索大語言模型開源檢索增強生成評估大語言模型服務高級檢索增強生成 RAG 如上…

Linux 隨機數據生成

目錄 一. /dev/urandom1.1 dd 命令1.2 head命令1.3 隨機字母 二. openssl 命令三. yes命令 一. /dev/urandom ?/dev/urandom 是 Linux 和 Unix 系統中的一個特殊文件&#xff0c;它是一個偽隨機數生成器&#xff0c;用于提供高吞吐量的隨機數據。 1.1 dd 命令 bs1M count10…

項目如何安裝本地tgz包并配置局部registry

一、判斷包來源是否正確 1. 檢查url curl <registry_url>2. 查看包是否存在 npm view <package_name> --registry<registry_url>二、局部registry配置步驟&#xff1a; 1. 全局配置 如果你希望對所有項目生效&#xff0c;可以將這行配置添加到全局.npmr…

QCustomPlot入門

QCustomPlot 是一個基于 Qt 的 C++ 繪圖庫,專注于高效、美觀的 2D 數據可視化。進入QCustomPlot下載頁,下載最新的完整包(包含:源碼、文檔、示例)。 一、核心架構設計 1. 分層架構模型 層級主要組件職責說明用戶接口層QCustomPlot 類提供頂層API,管理所有子組件邏輯控制…

C語言快速入門-C語言基礎知識

這個c語言入門&#xff0c;目標人群是有代碼基礎的&#xff0c;例如你之前學過javaSE&#xff0c;看此文章可能是更有幫助&#xff0c;會讓你快速掌握他們之間的差異&#xff0c;文章內容大部分都是泛談&#xff0c;詳細的部分我會在之后時間發布&#xff0c;我也在慢慢學習&am…

【商城實戰(91)】安全審計與日志管理:為電商平臺筑牢安全防線

【商城實戰】專欄重磅來襲!這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建,運用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用戶、商品、訂單等核心模塊開發,再到性能優化、安全加固、多端適配,乃至運營推廣策略,102 章內容層層遞進。無論是想…

信息安全工程師第 1 章

《信息安全工程師教程(第2版)》第一章 一、網絡信息安全基本概念與重要性 網絡信息安全定義 狹義:保障信息系統的機密性(C)、完整性(I)、可用性(A)——CIA三性。廣義:涵蓋國家安全、經濟安全、社會安全等的“大安全”。法律依據:《網絡安全法》定義網絡安全為防范攻…

為什么視頻文件需要壓縮?怎樣壓縮視頻體積即小又清晰?

在日常生活中&#xff0c;無論是為了節省存儲空間、便于分享還是提升上傳速度&#xff0c;我們常常會遇到需要壓縮視頻的情況。本文將介紹為什么視頻需要壓縮&#xff0c;壓縮視頻的好處與壞處&#xff0c;并教你如何使用簡鹿視頻格式轉換器輕松完成MP4視頻文件的壓縮。 為什么…

網絡空間安全(45)PHP入門學習

一、PHP文件與結構 PHP文件擴展名&#xff1a;PHP文件通常以.php作為擴展名&#xff0c;例如index.php。 PHP代碼嵌入&#xff1a;PHP代碼可以嵌入到HTML文件中&#xff0c;通常使用<?php ... ?>標簽包圍PHP代碼。短標簽<? ... ?>在某些配置下也可以使用&…

深入 OpenPDF:高級 PDF 生成與操作技巧

1 引言 1.1 項目背景 在許多企業級應用中,生成和操作 PDF 文檔是一個常見的需求。PDF(Portable Document Format)因其格式統一、易于打印和分發而被廣泛使用。本文將介紹如何使用 OpenPDF 庫在 Java 項目中生成和操作 PDF 文檔。 1.2 技術選型理由 OpenPDF:OpenPDF 是一…

力扣hot100——最長連續序列(哈希unordered_set)

題目鏈接&#xff1a;最長連續序列 1、錯解&#xff1a;數組做哈希表&#xff08;內存超出限制&#xff09; int longestConsecutive(vector<int>& nums) {vector<bool> hash(20000000010, false);for(int i0; i<nums.size();i){hash[1000000000nums[i]]t…

Qt中信號帶參傳值

在我們的Qt信號中是可以進行參數的傳遞的&#xff0c;不過格式上與寫普通函數不同。 這是頭文件中定義一個含參信號和一個含參槽函數 我們再來看它們兩個的綁定 。第一行的clicked()和on_btn_clicked()就是普通無參信號和槽的綁定&#xff1b;第二行就是上圖中兩個帶參信號和槽…

CSS3學習教程,從入門到精通, CSS3 列表控制詳解語法知識點及案例代碼(24)

CSS3 列表控制詳解 CSS 列表控制的語法知識點及案例代碼的詳細說明&#xff0c;包括 list-style-type、list-style-image、list-style-position 和 list-style 的用法。 1. list-style-type 屬性 list-style-type 屬性用于設置列表項標記的類型。 語法 list-style-type: v…

用Deepseek寫掃雷uniapp小游戲

掃雷作為Windows系統自帶的經典小游戲&#xff0c;承載了許多人的童年回憶。本文將詳細介紹如何使用Uniapp框架從零開始實現一個完整的掃雷游戲&#xff0c;包含核心算法、交互設計和狀態管理。無論你是Uniapp初學者還是有一定經驗的開發者&#xff0c;都能從本文中獲得啟發。 …

Dust3r、Mast3r、Fast3r

目錄 一.Dust3r 1.簡述 2.PointMap與ConfidenceMap 3.模型結構 4.損失函數 5.全局對齊 二.Mast3r 1.簡述 2.MASt3R matching 3.MASt3R sfm 匹配與標準點圖 BA優化 三.Fast3r 1.簡述 2.模型結構 3.損失函數 三維重建是計算機視覺中的一個高層任務&#xff0c;包…