兩個月前我寫過一篇部落格 Windows VS Code 配置 C/C++ 開發環境 ,主要介紹了在 VS Code 裡跑簡單 C 程式的一些方法。不過那篇文章裡介紹的方法僅適用於單檔案程式,所以稍微大一點的專案就力不從心了。
但是對於課程設計這類,說大不大說小也不算小的 C++ 專案,也不是特別想用大型 IDE(如VS)……所以我更新了一下相關的 VSC 配置,使其也能用於多檔案的 C++ 專案。
為了方便以後複用,也給其他有類似需求的人一個參考,相關的配置檔案整理如下(新建專案時複製一份到 .vscode
裡就行了)。
這一年來 VS Code 的 C/C++ 擴充套件 更新了不少,還支援在 WSL 裡 Remote 開發了。不過本文中還是繼續以 Windows 下的 MinGW-w64 為例。WSL 的配置也差不多,有興趣的可以看看參考連結裡的官方文件。
c_cpp_properties.json
:
{
"configurations": [
{
// 配置的名稱,可以新增多個在編輯器右下角切換
"name": "MinGW",
"intelliSenseMode": "gcc-x64",
// 這裡的編譯器路徑,包括下面的一些選項都只是
// 給 IntelliSense 用的,和具體專案構建沒關係
"compilerPath": "C:\\Portable\\mingw64\\bin\\gcc.exe",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
tasks.json
:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
// 任務標籤名
"label": "compile",
// 任務型別
"type": "shell",
// 編譯器選擇
"command": "g++",
// 編譯預執行的命令集
"args": [
"-g",
"\"${file}\"",
"-o",
"\"${fileDirname}\\${fileBasenameNoExtension}\""
],
// 任務輸出配置
"presentation": {
"reveal": "always",
"panel": "shared",
"focus": false,
"echo": true
},
// 任務所屬組名
"group": "build",
// 編譯問題輸出匹配配置
"problemMatcher": {
"owner": "cpp",
"fileLocation": "absolute",
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"type": "shell",
"label": "C/C++: g++.exe build active file",
"command": "C:\\Portable\\mingw64\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
launch.json
:
{
"version": "0.2.0",
"configurations": [
{
// 使用 GDB 除錯程式
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
// 之前編譯好的可執行檔案路徑
"program": "${workspaceFolder}/build/${workspaceFolderBasename}.exe",
"args": [],
"stopAtEntry": false,
// 設定 cwd 到 build 目錄
"cwd": "${workspaceFolder}/build",
"environment": [],
// 不要在整合終端裡執行程式
"externalConsole": true,
"MIMode": "gdb",
// 偵錯程式可執行檔案的路徑
"miDebuggerPath": "C:\\Portable\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
// 除錯前先執行 compile(定義在上面的 tasks.json 裡)
"preLaunchTask": "compile"
}
]
}
稍微解釋一下這些檔案的作用。
這三個檔案都是放在專案的 .vscode
目錄下的,其中 c_cpp_properties.json
用於配置 VSC 的 C/C++ 擴充套件,tasks.json
配置專案的構建流程,launch.json
則是配置如何執行(或除錯)構建好的程式。
在 VSC 內編輯這些配置檔案時,滑鼠移動到 JSON 的 key 上就可以檢視相關配置項的說明,非常方便。另外 c_cpp_properties.json
這個檔案,也可以通過 Ctrl + Shift + P 皮膚執行 C/C++: Edit Configurations (UI)
命令開啟圖形化配置頁面。關鍵配置項的作用都已經在上面的註釋裡說明了,就不再贅述。
最終整個專案的目錄結構應該是這樣的:
$ tree -a
.
├── .vscode
│ ├── c_cpp_properties.json
│ ├── launch.json
│ ├── settings.json
│ └── tasks.json
├── build
│ └── vscode-cpp-quick-setup.exe
└── src
├── Greeter.cpp
├── Greeter.h
└── main.cpp
所有原始碼放在 src
目錄中,編譯後的可執行檔案將以當前 workspace 命名(一般是目錄名),存放於 build
目錄中。