---
# System prepended metadata

title: C++編譯環境建構(in VSCode)
tags: [tutorial, C/C++, programming]

---

---
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`
