(2021 最新) 用 VSCode 寫 C++ 教學 - Part 1

本次環境:VSCode + Code Runner + TDM-GCC 10.3.0 /w Windows 10

前言

之前 Dev-C++ 手動升級編譯器使用的是 MinGW。
但後來發現 MinGW 有點太舊了(有的電腦還會裝到 6.2.0),是時候換個編譯器了。

TDM-GCC 目前版本為 10.3.0,最新版的 GNU GCC 為 11.2(截至 2021/09/23 以前)。

安裝 TDM-GCC

TDM-GCC 官方網站:https://jmeubank.github.io/tdm-gcc/

進到 Download 會有以下選項,上面兩個按鈕都可以選。
tdm-gcc-webdl.exe 是網路安裝,會自動上網抓最新版。
tdm64-gcc-10.3.0-2.exe 就是 Local 安裝,根據後面版本號多少就是多少。

按下 Create 安裝。

選擇 MinGW-w64/TDM64

可以不用動它,下一步就好。

這裡就照他預設給的就好,除非你有想裝 Fortran Ada 那些再來選。
如果想跑 C/C++ 平行處理記得打勾 OpenMP。

安裝中……

安裝完畢後,打開 cmd,輸入 g++ -v,跳出類似下方訊息就代表成功。

如果沒有成功請看 FAQ

VSCode 設定

我這裡會習慣開單獨資料夾放 C++ 的獨立環境,放哪裡其實沒差,因為都適用。

打開後大概會像這樣,空白的資料夾,左上方會寫你打開的資料夾名稱(我取名叫 CppSolution)。

接下來到 VSCode 延伸模組安裝 Code Runner。

安裝完後回到開啟的資料夾。
開新的資料夾 .vscode,裡面開新檔案 settings.json
將以下文字貼進去裡面。

{
    "code-runner.ignoreSelection": true,
    "code-runner.executorMap": {
        "cpp": "cd $dir & g++ -Wall -Wextra -O2 -std=c++14 \"$fileName\" -o \"$fileNameWithoutExt\" & $dir\"$fileNameWithoutExt\""
    },
    "code-runner.preserveFocus": false,
    "code-runner.clearPreviousOutput": true,
    "code-runner.runInTerminal": true,
    "code-runner.saveFileBeforeRun": true,
    "terminal.integrated.defaultProfile.windows": "Command Prompt",
}

大概說一下在做什麼:
Line 3 code-runner.executorMap 是設定副檔名為 xxx 時,作執行時會跑哪些命令。
Line 4 設定 cpp 的執行命令。進入該檔案的資料夾,使用 g++ 加上其他參數編譯(也可以自行改 c++17),並且執行它。
Line 7 清除上次在終端機執行的輸出。
Line 8 在終端機上面跑,這一定要設定為 true,不然會跑到輸出,而非終端機。
Line 9 執行前先存檔。
Line 10 預設終端機改為 Windows Command Prompt

接下來,打一段 Code 來測試吧!

#include <bits/stdc++.h>
using namespace std;

int main()
{
    string name;
    cin >> name;
    cout << "Hello " << name << "!" << endl;
    return 0;
}

按下右上角的播放鍵就可以 Run Code 了。

恭喜你已經做出最簡單的 C++ 單檔案編譯執行了,是不是很棒呢?

FAQ

g++ 不是內部或外部命令、可執行的程式或批次檔。

這個問題通常是環境變數沒有加好,不過安裝 TDM-GCC 時它已經很貼心幫你加入了,請把 cmd 或 VSCode 關掉重開就好。

或者參考我以前的文章加入環境變數,路徑為:你的 TDM-GCC 路徑\bin,E.g. C:\TDM-GCC-64\bin,加入後再把 cmd 或 VSCode 關掉重開就好。

後記

VSCode 的彈性其實很大,也可以根據你的需求調整。
上面的命令也可以改成檔案輸出入重新導向。

"cpp": "cd $dir & g++ -Wall -Wextra -O2 -std=c++14 \"$fileName\" -o \"$fileNameWithoutExt\" & $dir\"$fileNameWithoutExt\" < 1.in > 1.out"

可以再加裝其他的延伸模組來玩,像是 Template Generator 拿來打模板。
不過礙於篇幅,就不多介紹了,如果需要就在底下多按讚跟留言,可以考慮再寫一篇介紹。

那我們就下一篇文章見!ㄅㄅ