# 2025 環境配置 ## 安裝環境 全域安裝 開啟CMD或PowerShell [使用winget管理套件](https://winstall.app/apps) 用Chocolatey也可以 ```bash winget install Microsoft.VisualStudioCode --scope machine winget install MSYS2.MSYS2 --scope machine winget install Git.Git --scope machine ``` :::spoiler 關於VSCODE全域安裝 會漏掉右鍵加入選單的功能 手動建立vscode_menu.reg 並指定儲存編碼為UTF-16 LE 在執行他即可 ``` Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\VSCode] @="Open with Code" "Icon"="C:\\Program Files\\Microsoft VS Code\\Code.exe" [HKEY_CLASSES_ROOT\*\shell\VSCode\command] @="\"C:\\Program Files\\Microsoft VS Code\\Code.exe\" \"%1\"" [HKEY_CLASSES_ROOT\Directory\shell\VSCode] @="Open with Code" "Icon"="C:\\Program Files\\Microsoft VS Code\\Code.exe" [HKEY_CLASSES_ROOT\Directory\shell\VSCode\command] @="\"C:\\Program Files\\Microsoft VS Code\\Code.exe\" \"%V\"" ``` ::: 配置 MSYS2 UCRT64 工具鏈 在msys64的資料夾開啟ucrt64.exe ```bash pacman -Syu pacman -S mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake ``` 加入環境變數 來使用g++、make、code 不過需要注意的是執行make需要輸入mingw32-make 如果想要簡短的話需要另外設置別名alias ``` C:\msys64\ucrt64\bin C:\Program Files\Microsoft VS Code\bin ``` 至於visual studio則是透過vcpkg管理 另外談 ## VSCODE設定 安裝C/C++ Microsoft插件 ``` 如果CMDb亂碼 "terminal.integrated.profiles.windows": { "Command Prompt": { "path": "cmd.exe", "args": ["/K", "chcp 65001"] } } "C_Cpp.default.includePath": [ "C:/msys64/ucrt64/include/**", "${workspaceFolder}/**" ] "C_Cpp.default.compilerPath": "C:/msys64/ucrt64/bin/g++.exe", "C_Cpp.default.intelliSenseMode": "windows-gcc-x64", "C_Cpp.default.cppStandard": "c++17", "C_Cpp.intelliSenseEngine": "default" ``` VS Code 的 IntelliSense與的編譯器其實是分開運行的: - 編譯器g++:因為設定了系統全域 Path,所以能自己找到標頭檔,編譯會過 - IntelliSense「靜態解析器」,不會去讀取系統全域 Path,只會看 c_cpp_properties.json 或 VS Code 的預設設定 ## 補充 & References 给萌新的C/C++环境搭建攻略(VSCode和MSYS2) ::: spoiler msys2重點 一般来说,每个子环境下都有bin(含编译器的可执行文件等)/include(标准库和安装的第三方库头文件)/lib(动态库和静态库等)等文件夹,如果遇到问题可以去相应的路径查看。 未來需要使用opencv或SDL等函式庫時 只需要透過pacman -S mingw-w64-ucrt-x86_64-庫的名字 來進行管理 而使用msys2的mingw編譯的code 所需的延展最好都交給msys2透過pacman管理 因為已經有把msys64\ucrt64\bin 加入全域 PATH,這些庫安裝後,你的程式在執行時會自動找到對應的dll 详细解释一下几个子环境的区别: - MSYS环境是基础环境,包含各种linux命令行工具(例如pacman等),其它子环境都继承于它。但在这个子环境里编译的程序依赖于MSYS2的动态库,因此直接把编译出来的.exe发给其他人的话会无法运行,需要带上/usr/bin文件夹下的MSYS-2.0.dll等依赖库才行。一般不建议使用。(需要完整linux环境的请考虑WSL或者虚拟机) - MINGW64环境编译的程序不依赖MSYS2,只依赖于windows自带的C语言库msvcrt,较为通用。 - UCRT64与MINGW64类似,但依赖于比较新的C语言库ucrt,这个库win10/11自带,也是目前微软家的Visual Studio使用的库,但win7/XP可能需要手动安装。未来将会替代MINGW64。 - CLANG64环境使用LLVM工具链而非GCC工具链,所有配套环境都是基于LLVM的(比如这个环境里的gcc.exe其实是clang.exe的重命名)。 - MINGW32和CLANG32顾名思义,使用32位的mingw/clang工具链,如果没有特殊需求基本不用考虑,用64位版本就好。 最早只有MSYS,MINGW64和MINGW32三个子环境,子环境数量由于开发的需要正在增加,将来可能还会加入CLANGARM64(可用于Android程序编译) MinGW64 (舊式的穩定選擇) - 使用的庫: msvcrt.dll。 - 背景: 這是 Windows 很久以前的舊標準(可以追溯到 Windows 95 時代)。 - 優點: 兼容性極強,幾乎在任何老舊的 Windows 電腦上都能直接跑,不需要額外裝插件。 - 缺點: 對現代 C++ 標準的支持稍微有點「老氣」,特別是在處理 UTF-8 編碼、日期時間格式上,有時會顯得力不從心。 UCRT64 (現代化的官方推薦) - 使用的庫: ucrtbase.dll (Universal C Runtime)。 - 背景: 這是微軟隨著 Windows 10 推出的現代標準。也是 Visual Studio (MSVC) 現在默認使用的庫。 - 優點: 1. 更現代: 對 C99/C11/C++20 的支持更精準。 2. 更規範: 它處理中文字符(UTF-8)和跨平台代碼時,表現得更像 Linux 的邏輯。 3. 微軟親生: 它是微軟目前全力維護的標準。 - 缺點: 在極老舊的系統(如未更新的 Win7)上可能跑不起來。 ::: https://zhuanlan.zhihu.com/p/401188789 Configure VS Code for Microsoft C++ https://code.visualstudio.com/docs/cpp/config-msvc#_step-through-the-code