--- title: 'C++編譯環境建構(in VSCode)' disqus: hackmd --- C++編譯環境建構(in VSCode) === ![downloads](https://img.shields.io/github/downloads/atom/atom/total.svg) ![build](https://img.shields.io/appveyor/ci/:user/:repo.svg) ![chat](https://img.shields.io/discord/:serverId.svg) ## 大綱 [TOC] ## 前置作業 VScode是一個具擴充能力的"文字編輯器"(本身不帶有編譯器),要能夠編譯程式語言通常需要透過安裝"插件"來獲得能力。 首先,在建構環境前你需要: 1. 安裝 [Visual Studio Code](https://code.visualstudio.com/download) 2. 安裝 VScode的C++插件 ![C++Extension](https://i.imgur.com/YiHsidx.png) 3. 下載 [Mingw-w64](http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe/download)並安裝 ::: warning 注意 : - Mingw安裝的路徑請不要含有"**空格**"以及"**中文**",以免產生問題。(不要使用預設的路徑,那有~~他媽的~~空格) - 建議裝在 "C:\\",本教學以此路徑作為範例 ::: 4. 將Mingw內的"bin"目錄的路徑加到Windows環境變數PATH裡面: 1.按下 Win+Pause 2.點選 進階系統設定 3.點選 環境變數 ![環境變數](https://i.imgur.com/bArpbGu.png) 4.選取 系統變數 的 Path,點 編輯 5.點選 新增 ,輸入 Mingw的bin目錄的路徑![](https://i.imgur.com/1gwr0SC.png) 5. 測試:在cmd("命令提示字元")輸入 : ``` g++ --version``` 若執行成功,則環境變數設定成功。 建立工作目區 --- 工作區會除了可以設定工作目錄外,還能保存針對工作區的個別設定,對於配置不同的程式語言編譯環境十分有幫助。 本文也是以以工作區來設定建構環境的。 首先,你需要選定一個資料夾(**資料夾路徑請不要有空格以及中文**)作為我們編譯C/C++所使用的辜作區, ![選擇資料夾](https://i.imgur.com/MXh1buV.png) 在VSCode開啟資料夾後,點選"另存工作區為",將工作區檔存放於工作資料夾內, ![](https://i.imgur.com/Mc2X6wz.png) 編輯設定檔 --- *產生設定檔目錄(.vscode)和設定檔* 此段落所有操作都是在工作區進行。 C++插件的擴充套件是透過[JSON](https://zh.wikipedia.org/wiki/JSON)檔案來設定的(剛剛完成的工作區也是)。 首先我們先處理插件的JSON設定檔--```c_cpp_properties.json```,按下```Ctrl+Shift+P```叫出選單,找到```C/C++:Edit Configurations (UI)```,進入之後你會看到一個圖像化的介面如下![C/C++:Edit Configurations (UI)](https://i.imgur.com/pcauXdu.png),將"編輯器路徑"改成```C:\Mingw-w64\bin\g++.exe```,並將IntelliSense模式的設定改為```gcc-x64```,存檔後關閉。 接著我們新增一份.cpp檔案,接著按下F5, ![new a helloworld.cpp](https://i.imgur.com/ai4qvQs.png) 會跳出一個選單,選擇第一個選項"C++ (GDB/LLDB)", ![F5選單](https://i.imgur.com/fzuhvrc.png) 接著選"g++.exe ...", ![F5選單2](https://i.imgur.com/NrJa05z.png) 他就會把```launch.json``` 、 ```tasks.json```都改建構好了喔! *無效則,手動建立json任務檔 再來是```launch.json```設定檔,它會決定當你按下```F5```(或是左邊選單的"偵錯")會執行的"任務",內容應設定為: ```json { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "C:/Mingw-w64/bin/gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build" ] } ``` 最後是```tasks.json```設定檔,他描述了一個要預先執行的任務內容,並交由launch.json執行("preLaunchTask": "build"),其內容應為: ```json { "version": "2.0.0", "tasks": [ { "type": "shell", "label": "build", "command": "C:/Mingw-w64/bin/g++.exe", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.exe" ], "group": { "kind": "build", "isDefault": true } } ] } ``` *變數說明 : ${fileDirname}, ${fileBasenameNoExtension}, ${workspaceFolder}, etc.. 操作說明 --- 每當要編譯.cpp檔案時,要先開啟工作區,接著開啟檔案按下F5,就會編譯並並運行囉。 而程式執行後輸入輸出的結果會在下方"終端機"的標籤頁下。 :::info 如果想要有像是Devc++、CodeBlocks一樣有一個外部的cmd來輸入輸出,你需要修改```launch.json```設定中的 "externalConsole" : ![externalConsole](https://i.imgur.com/dh4jqoA.png) 將 "externalConsole" 的設定改為```true```。 ::: ## 原理說明 ## 參考資料 https://code.visualstudio.com/docs/cpp/config-mingw --微軟寫的非常完整 ###### tags: `tutorial`, `C/C++`, `programming`