實(shí)踐教程 | 2021年VSCode & C++最全配置攻略

極市導(dǎo)讀
本文將詳細(xì)介紹如何在Wins10系統(tǒng)下配置VSCode的C/C++編譯環(huán)境。 >>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最前沿
Why VSCode?
Visual Studio Code(簡稱VS Code)是一款由微軟開發(fā)且跨平臺(tái)(適用于 macOS、Linux 和 Windows)的免費(fèi)源代碼編輯器。該軟件支持語法高亮、代碼自動(dòng)補(bǔ)全(又稱IntelliSense)、代碼重構(gòu)、查看定義功能,并且內(nèi)置了命令行工具和Git版本控制系統(tǒng)。用戶可以更改主題和鍵盤快捷方式實(shí)現(xiàn)個(gè)性化設(shè)置,也可以通過內(nèi)置的擴(kuò)展程序商店安裝擴(kuò)展以拓展軟件功能(輕量化)。本文將詳細(xì)介紹如何在Wins10系統(tǒng)下配置VSCode的C/C++編譯環(huán)境。

下載VSCode
直接進(jìn)入官網(wǎng)[1]下載Windows版本,解壓安裝即可。


下載編譯器
進(jìn)入官網(wǎng)[2]下載MinGW-w64:

下載完解壓,并將文件夾放置到C:\Program Files(可自定義,嫌麻煩默認(rèn)系統(tǒng)路徑),并添加到環(huán)境變量,用windows的搜索功能(快捷鍵是Windows徽標(biāo)鍵+S)搜索環(huán)境變量:

把路徑:C:\Program Files\mingw64\bin 添加進(jìn)去:


最后,再驗(yàn)證下編譯器是否成功配置,打開cmd,輸入gcc --version,回車:

注:GCC調(diào)試器不支持中文路徑?。。?/p>
文件配置
這里大家可以按照這個(gè)文件目錄模板先復(fù)制一遍,后期根據(jù)自己需求更改即可(注意這里.vscode文件夾 . 不能省略):

其次,我們打開VSCode,鏈接到這個(gè)CODE_C文件夾:


按照上面的步驟,我們可以先搜索Chinese這個(gè)插件,將VSCode進(jìn)行漢化。安裝完之后點(diǎn)擊右下角的Restart重啟后便可以了:

同樣地步驟,我們?cè)偎阉鰿/C++插件,點(diǎn)擊安裝即可:

關(guān)閉VSCode后再重啟,在.vscode文件下新建下列幾個(gè)文件:
tasks.json
{
"version": "2.0.0",
"tasks": [
{//這個(gè)大括號(hào)里是‘構(gòu)建(build)’任務(wù)
"label": "build", //任務(wù)名稱,可以更改,不過不建議改
"type": "shell", //任務(wù)類型,process是vsc把預(yù)定義變量和轉(zhuǎn)義解析后直接全部傳給command;shell相當(dāng)于先打開shell再輸入命令,所以args還會(huì)經(jīng)過shell再解析一遍
"command": "gcc", //編譯命令,這里是gcc,編譯c++的話換成g++
"args": [ //方括號(hào)里是傳給gcc命令的一系列參數(shù),用于實(shí)現(xiàn)一些功能
"${file}", //指定要編譯的是當(dāng)前文件
"-o", //指定輸出文件的路徑和名稱
"${fileDirname}\\bin\\${fileBasenameNoExtension}.exe", //承接上一步的-o,讓可執(zhí)行文件輸出到源碼文件所在的文件夾下的bin文件夾內(nèi),并且讓它的名字和源碼文件相同
"-g", //生成和調(diào)試有關(guān)的信息
"-Wall", // 開啟額外警告
"-static-libgcc", // 靜態(tài)鏈接libgcc
"-fexec-charset=GBK", // 生成的程序使用GBK編碼,不加這一條會(huì)導(dǎo)致Win下輸出中文亂碼
"-std=c11", // 語言標(biāo)準(zhǔn),可根據(jù)自己的需要進(jìn)行修改,寫c++要換成c++的語言標(biāo)準(zhǔn),比如c++11
],
"group": { //group表示‘組’,我們可以有很多的task,然后把他們放在一個(gè)‘組’里
"kind": "build",//表示這一組任務(wù)類型是構(gòu)建
"isDefault": true//表示這個(gè)任務(wù)是當(dāng)前這組任務(wù)中的默認(rèn)任務(wù)
},
"presentation": { //執(zhí)行這個(gè)任務(wù)時(shí)的一些其他設(shè)定
"echo": true,//表示在執(zhí)行任務(wù)時(shí)在終端要有輸出
"reveal": "always", //執(zhí)行任務(wù)時(shí)是否跳轉(zhuǎn)到終端面板,可以為always,silent,never
"focus": false, //設(shè)為true后可以使執(zhí)行task時(shí)焦點(diǎn)聚集在終端,但對(duì)編譯來說,設(shè)為true沒有意義,因?yàn)檫\(yùn)行的時(shí)候才涉及到輸入
"panel": "new" //每次執(zhí)行這個(gè)task時(shí)都新建一個(gè)終端面板,也可以設(shè)置為shared,共用一個(gè)面板,不過那樣會(huì)出現(xiàn)‘任務(wù)將被終端重用’的提示,比較煩人
},
"problemMatcher": "$gcc" //捕捉編譯時(shí)編譯器在終端里顯示的報(bào)錯(cuò)信息,將其顯示在vscode的‘問題’面板里
},
{//這個(gè)大括號(hào)里是‘運(yùn)行(run)’任務(wù),一些設(shè)置與上面的構(gòu)建任務(wù)性質(zhì)相同
"label": "run",
"type": "shell",
"dependsOn": "build", //任務(wù)依賴,因?yàn)橐\(yùn)行必須先構(gòu)建,所以執(zhí)行這個(gè)任務(wù)前必須先執(zhí)行build任務(wù),
"command": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe", //執(zhí)行exe文件,只需要指定這個(gè)exe文件在哪里就好
"group": {
"kind": "test", //這一組是‘測試’組,將run任務(wù)放在test組里方便我們用快捷鍵執(zhí)行
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true, //這個(gè)就設(shè)置為true了,運(yùn)行任務(wù)后將焦點(diǎn)聚集到終端,方便進(jìn)行輸入
"panel": "new"
}
}
]
}
launch.json
{
"version": "0.2.0",
"configurations": [
{//這個(gè)大括號(hào)里是我們的‘調(diào)試(Debug)’配置
"name": "Debug", // 配置名稱
"type": "cppdbg", // 配置類型,cppdbg對(duì)應(yīng)cpptools提供的調(diào)試功能;可以認(rèn)為此處只能是cppdbg
"request": "launch", // 請(qǐng)求配置類型,可以為launch(啟動(dòng))或attach(附加)
"program": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe", // 將要進(jìn)行調(diào)試的程序的路徑
"args": [], // 程序調(diào)試時(shí)傳遞給程序的命令行參數(shù),這里設(shè)為空即可
"stopAtEntry": false, // 設(shè)為true時(shí)程序?qū)和T诔绦蛉肟谔?,相?dāng)于在main上打斷點(diǎn)
"cwd": "${fileDirname}", // 調(diào)試程序時(shí)的工作目錄,此處為源碼文件所在目錄
"environment": [], // 環(huán)境變量,這里設(shè)為空即可
"externalConsole": false, // 為true時(shí)使用單獨(dú)的cmd窗口,跳出小黑框;設(shè)為false則是用vscode的內(nèi)置終端,建議用內(nèi)置終端
"internalConsoleOptions": "neverOpen", // 如果不設(shè)為neverOpen,調(diào)試時(shí)會(huì)跳到“調(diào)試控制臺(tái)”選項(xiàng)卡,新手調(diào)試用不到
"MIMode": "gdb", // 指定連接的調(diào)試器,gdb是minGW中的調(diào)試程序
"miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe", // 指定調(diào)試器所在路徑,如果你的minGW裝在別的地方,則要改成你自己的路徑,注意間隔是\\
"preLaunchTask": "build" // 調(diào)試開始前執(zhí)行的任務(wù),我們?cè)谡{(diào)試前要編譯構(gòu)建。與tasks.json的label相對(duì)應(yīng),名字要一樣
}]
}
注:上面兩個(gè)文件需要大家仔細(xì)閱讀,把文中相應(yīng)的路徑改為你自己電腦上對(duì)應(yīng)的路徑,路徑要統(tǒng)一?。?!
運(yùn)行調(diào)試C程序
在C_single文件夾下新建exercise文件夾; 在exercise文件下新建bin文件夾; 在exercise文件夾下新建hello.c文件:
#include <stdio.h>
int main()
{
char name[10];
printf("Input your name: ");
scanf("%s",name);
printf("Hello,%s,this is your vscode!\n",name);
return 0;
}
安裝運(yùn)行插件,商店搜索“Code Runner”,安裝:

同樣地步驟再次搜索“C/C++ Clang Command Adapter”,安裝:

點(diǎn)擊VSCode右下角進(jìn)行運(yùn)行:

如果出現(xiàn)“Please install clang or check configuration clang.executable”提示,則進(jìn)入這個(gè)網(wǎng)站 clang下載,版本下載最新版本即可。安裝過程中可勾選將其添加到系統(tǒng)環(huán)境路徑下,否則需自行手動(dòng)添加:


重啟VSCode,再次點(diǎn)擊運(yùn)行按鈕即可:

運(yùn)行調(diào)試C++程序
下面我們按這個(gè)工作目錄新建一個(gè)工程:

需要注意的是,我們要將.vscode這個(gè)文件夾放置到當(dāng)前工作區(qū)目錄下,而不能放到子文件夾目錄下,否則會(huì)出現(xiàn)下面情況:即Bulid finished with error: *** 終端進(jìn)程啟動(dòng)失?。ㄍ顺龃a:-1)

好了,文件目錄組織好后,我們看下這三個(gè)*.json的配置文件如何編寫,注意閱讀每個(gè)文件,把里面涉及到路徑的地方檢查一遍,一定要與你自己設(shè)置的路徑保持一致:
tasks.json
{
"version": "2.0.0",
"tasks": [
{ // 任務(wù)一
"label": "build", // 任務(wù)名稱
"type": "shell", // 任務(wù)類型
"command": "C:\\Program Files\\mingw64\\bin\\g++.exe", // 編譯命令,這里是g++,編譯c的話換成gcc
"args": [ // 命令所需要用到的參數(shù)
"-g", // 生成和調(diào)試有關(guān)的信息
"${file}",
"-o", // 指定命令輸出文件的路徑和名稱
"${fileDirname}\\bin\\${fileBasenameNoExtension}.exe",
"-Wall", // 開啟額外警告
"-fexec-charset=GBK", // 生成的程序使用GBK編碼,不加這一條會(huì)導(dǎo)致Win下輸出中文亂碼
"-std=c++11", // 語言標(biāo)準(zhǔn),可根據(jù)自己需要進(jìn)行修改,寫C要換成C語言標(biāo)準(zhǔn),比如C11
],
// "options": { // 可選的編譯命令
// "cwd": "C:\\Program Files\\mingw64\\bin"
// },
"presentation": { // 執(zhí)行這個(gè)任務(wù)的一些其他設(shè)定
"echo": true, // 表示在執(zhí)行任務(wù)時(shí)在終端要有輸出
"reveal": "always", // 執(zhí)行任務(wù)時(shí)是否跳轉(zhuǎn)到終端面板,可以為always,silent,never
"focus": false, // 設(shè)為true后可以使執(zhí)行task時(shí)焦點(diǎn)聚集在終端,但對(duì)編譯來說,設(shè)為true沒有意義,因?yàn)檫\(yùn)行時(shí)才涉及到輸入
"panel": "new", // 每次執(zhí)行這個(gè)task時(shí)都新建一個(gè)終端面板,也可以設(shè)置為shared,共用一個(gè)面板,不過那樣會(huì)出現(xiàn)‘任務(wù)將被終端重用’的提示,比較煩人
"showReuseMessage": true,
"clear": false
},
"problemMatcher": [
"$gcc" // 捕捉編譯時(shí)編譯器在終端里顯示的報(bào)錯(cuò)信息,將其顯示在vscode的‘問題’面板里
],
"group": {
"kind": "build", // group表示組,我們可以有很多task,然后把他們放在一個(gè)組里,“build”表示這一組任務(wù)類型是構(gòu)建
"isDefault": true // 表示這個(gè)任務(wù)是當(dāng)前這組任務(wù)中的默認(rèn)任務(wù)
},
"detail": "compiler: \"C:\\Program Files\\mingw64\\bin\\g++.exe\""
},
{ // 任務(wù)二
"label": "run",
"type": "shell",
"dependsOn": "build", // 任務(wù)依賴,因?yàn)檫\(yùn)行必須先構(gòu)建,所以執(zhí)行這個(gè)任務(wù)之前必須先執(zhí)行build任務(wù)
"command": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe",
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true, // 這個(gè)就設(shè)置為true了,運(yùn)行任務(wù)后將焦點(diǎn)聚集到終端,方便進(jìn)行輸入
"panel": "new",
"showReuseMessage": true,
"clear": false
}
}
]
}
launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{ // 這個(gè)大括號(hào)里是我們的‘Debug’配置
"name": "debug", // 配置名稱
"type": "cppdbg", // 配置類型,cppdbg對(duì)應(yīng)cpptools提供的調(diào)試功能
"request": "launch", // 請(qǐng)求配置類型,可以為launch(啟動(dòng))或attach(附加)
"program": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false, // 設(shè)置為true時(shí)程序?qū)和T诔绦蛉肟谔?,相?dāng)于在main上打斷點(diǎn),
"cwd": "${workspaceFolder}", // 調(diào)試程序時(shí)的工作目錄
"environment": [], // 環(huán)境變量,這里設(shè)置為空即可
"externalConsole": false, // 為true時(shí)使用單獨(dú)的cmd窗口,跳出小黑框;設(shè)為false則是用vscode內(nèi)置終端,建議使用內(nèi)置終端
// "internalConsoleOptions": "neverOpen", // 如果不設(shè)為neverOpen,調(diào)試時(shí)會(huì)跳到“調(diào)試控制臺(tái)”選項(xiàng)卡,新手調(diào)試用不到
"MIMode": "gdb", // 指定連接的調(diào)試器,gdb是minGW中的調(diào)試程序
"miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe", // 指定調(diào)試器的所在路徑
"setupCommands": [
{
"description": "為 gdb 啟用整齊打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build", // 調(diào)試開始簽執(zhí)行的任務(wù),我們?cè)谡{(diào)試前要編譯構(gòu)建,玉tasks.json的label相對(duì)于,名字要一樣
},
]
}
`
### settings.json
`{
"files.associations": {
"ostream": "cpp"
}
}
`
好了,配置完成后,我們?cè)趆ello.cpp文件下填寫hello world腳本:
`#include <iostream>
using namespace std;
int main()
{
cout << "Hello, World!";
return 0;
}
腳本寫完,直接點(diǎn)擊右上角的右三角形運(yùn)行按鈕即可:

這時(shí)候我們發(fā)現(xiàn),編譯生成的.exe可執(zhí)行文件出現(xiàn)在了與當(dāng)前腳本文件下的同級(jí)目錄中,這本身沒什么問題。但是但我們的腳本文件過多時(shí),會(huì)顯得非常冗余,所以我們?cè)诋?dāng)前目錄下新建了個(gè)bin目錄(也可以是build目錄等,這里自己重命名即可),然后我們要做的是將所有生成的.exe文件都放置到里面去,這里提供兩種方法:
直接通過VSCode自帶的編譯
按下快捷鍵Ctrl+Shift+B運(yùn)行生成任務(wù),或者直接在工具欄點(diǎn)擊即可:

選擇.g++程序執(zhí)行編譯操作:

可以看到,.exe文件跑里面去了

最后,我們直接按快捷鍵Ctrl+F5或者點(diǎn)擊工具欄運(yùn)行當(dāng)前文件即可:

更進(jìn)一步地,我們可以設(shè)置快捷鍵的方式去運(yùn)行測試文件:點(diǎn)擊左下角小齒輪->鍵盤快捷方式->搜索任務(wù)->找到運(yùn)行測試任務(wù),點(diǎn)擊左側(cè)加號(hào)添加鍵綁定,這里我們?cè)O(shè)為F4,

然后回到我們的hello程序頁面,按下F4即可大功告成?。。】偨Y(jié)如下:先用“Ctrl+Shift+B”進(jìn)行源文件的編譯,生成.exe可執(zhí)行文件;再用設(shè)置好的快捷鍵如"F4"運(yùn)行測試文件。
通過配置Code Runner來編譯
在.vscode文件夾下新建"settings.json"文件,將以下內(nèi)容復(fù)制進(jìn)去:
// {
// "files.associations": {
// "ostream": "cpp"
// },
// }
{
"files.defaultLanguage": "c++", // ctrl+N新建文件后默認(rèn)的語言
"editor.formatOnType": true, // 輸入分號(hào)(C/C++的語句結(jié)束標(biāo)識(shí))后自動(dòng)格式化當(dāng)前這一行的代碼
"editor.suggest.snippetsPreventQuickSuggestions": false, // clangd的snippets有很多的跳轉(zhuǎn)點(diǎn),不用這個(gè)就必須手動(dòng)觸發(fā)Intellisense了
"editor.acceptSuggestionOnEnter": "off", // 我個(gè)人的習(xí)慣,按回車時(shí)一定是真正的換行,只有tab才會(huì)接受Intellisense
// "editor.snippetSuggestions": "top", // (可選)snippets顯示在補(bǔ)全列表頂端,默認(rèn)是inline
"code-runner.runInTerminal": true, // 設(shè)置成false會(huì)在“輸出”中輸出,無法輸入
"code-runner.executorMap": {
"c": "gcc '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK && &'./$fileNameWithoutExt.exe'",
"cpp": "g++ '$fileName' -o './/bin//$fileNameWithoutExt.exe' -Wall -O2 -m64 -static-libgcc -std=c++11 -fexec-charset=GBK && &'.//bin//$fileNameWithoutExt.exe'"
}, //
"code-runner.saveFileBeforeRun": true, // run code前保存
"code-runner.preserveFocus": true, // 若為false,run code后光標(biāo)會(huì)聚焦到終端上。如果需要頻繁輸入數(shù)據(jù)可設(shè)為false
"code-runner.clearPreviousOutput": false, // 每次run code前清空屬于code runner的終端消息,默認(rèn)false
"code-runner.ignoreSelection": true, // 默認(rèn)為false,效果是鼠標(biāo)選中一塊代碼后可以單獨(dú)執(zhí)行,但C是編譯型語言,不適合這樣用
"code-runner.fileDirectoryAsCwd": true, // 將code runner終端的工作目錄切換到文件目錄再運(yùn)行,對(duì)依賴cwd的程序產(chǎn)生影響;如果為false,executorMap要加cd $dir
"C_Cpp.clang_format_sortIncludes": true, // 格式化時(shí)調(diào)整include的順序(按字母排序)
}
保存,然后再次點(diǎn)擊右上角的運(yùn)行按鈕即可?,F(xiàn)在,我們便可以愉快的玩耍拉~~~別忘記一鍵三連哦!
References
[1]https://code.visualstudio.com/download\
[2]https://sourceforge.net/projects/mingw-w64/files/
如果覺得有用,就請(qǐng)分享到朋友圈吧!
公眾號(hào)后臺(tái)回復(fù)“CVPR21檢測”獲取CVPR2021目標(biāo)檢測論文下載~

# CV技術(shù)社群邀請(qǐng)函 #

備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測-深圳)
即可申請(qǐng)加入極市目標(biāo)檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群
每月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競賽、干貨資訊匯總、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動(dòng)交流~

