VS code搭建 C 和 C++ 環(huán)境的完整圖文教程!
前言
前兩天有同學(xué)問(wèn)我如何用VScode搭建C語(yǔ)言的環(huán)境。
接下來(lái)直接動(dòng)手搭建C和C++的環(huán)境。
VS Code簡(jiǎn)單介紹
VS code是一個(gè)微軟旗下的一個(gè)廣受歡迎的開(kāi)源文本編輯器,相較于其他編輯器,VS code有著非常多的優(yōu)點(diǎn)而讓開(kāi)發(fā)者們對(duì)其愛(ài)不釋手。
- 比如炫酷的主題、漂亮的外觀、集成了終端以及輕量級(jí)的體積等等等等,VS code最厲害的地方在于他有著成熟的插件市場(chǎng)(我們下面馬上就要用到)以滿足開(kāi)發(fā)者的各種開(kāi)發(fā)需求,得益于這個(gè)插件市場(chǎng),我們可以把VS code打造成各種開(kāi)發(fā)環(huán)境。
VS code的下載也很簡(jiǎn)單,直接去官網(wǎng)下載安裝即可。
MinGW簡(jiǎn)單介紹和下載配置
需要注意的一點(diǎn)是,VS code只是一個(gè)文本編輯器,本質(zhì)上和Windows的記事本是一個(gè)東西,它不是一個(gè)編譯器,它只是一個(gè)編輯器,編輯器是無(wú)法編譯運(yùn)行程序的,這是編譯器的工作。
那么為了讓我們能夠在VS code里面編譯并運(yùn)行C/CPP文件,我們需要去額外安裝C和C++的編譯器:GCC。
Windows平臺(tái)上的GCC移植版本是MinGW。我們用MinGW其實(shí)也就是用里面的GCC來(lái)編譯我們寫(xiě)的C/C++文件。
進(jìn)去之后,選擇files:
下載MinGW的壓縮包:
下載過(guò)程由于是從外網(wǎng)下載,會(huì)比較慢,可以多試幾次或者掛代理,另外根據(jù)筆者的經(jīng)驗(yàn)來(lái)看外網(wǎng)的東西一般中午下載起來(lái)會(huì)比較快。
下載好了之后把他放在一個(gè)沒(méi)有中文和空格的目錄下解壓,然后配置環(huán)境變量。
- 在Win10的搜索欄(快捷鍵win+S)搜索環(huán)境變量會(huì)彈出系統(tǒng)屬性,點(diǎn)擊環(huán)境變量——上方的用戶變量里面找到Path——點(diǎn)擊編輯——點(diǎn)擊新建,然后把你的MinGW的bin路徑復(fù)制進(jìn)去(如:D:\development\MinGW\bin),然后一路確定。
這樣環(huán)境變量就配置好了,我們可以隨便找一個(gè)路徑打開(kāi)一個(gè)cmd輸入:gcc --version來(lái)驗(yàn)證一下:
接下來(lái)我們配置VScode
VScode配置
打開(kāi)VScode,然后打開(kāi)左邊的插件市場(chǎng),下載并安裝兩個(gè)插件:
● Chinese:中文漢化插件,VScode默認(rèn)是英文界面,為了方便咱給他改成中文的。在搜索欄搜索Chinese,選則中文簡(jiǎn)體點(diǎn)擊右下角的安裝(我這里安裝過(guò)了所以沒(méi)有那個(gè)安裝按鈕)。
● C/C++:一款C/C++語(yǔ)法高亮的代碼插件。安裝方式和Chinese一樣。
搞定之后我們來(lái)寫(xiě)一個(gè)C文件測(cè)試一下,點(diǎn)擊左上角的文件——打開(kāi)文件夾——選擇一個(gè)空文件夾打開(kāi),然后右鍵——新建文件:
隨便起個(gè)名(如Hello.c),隨便寫(xiě)點(diǎn)代碼,比如經(jīng)典的Hello World:
int main(void)
{
printf("Hello World!");
return 0;
}
然后我們編譯他,點(diǎn)擊最上方的終端-->配置默認(rèn)生成任務(wù)(也可以用快捷鍵ctrl+shift+b)然后你會(huì)看到這樣一個(gè)選項(xiàng):
這是讓我們選擇用什么來(lái)編輯這個(gè)文件,由于我們寫(xiě)的是C文件,應(yīng)該用能夠編譯C文件的編譯器(也就是我們上文配置的MinGW里面的GCC)。
我們點(diǎn)擊這里的C/C++編輯器,然后就會(huì)發(fā)現(xiàn)我們這里生成了一個(gè)Hello.exe文件和 .vs code文件夾。
打開(kāi)一個(gè)終端(終端——新終端),輸入.\Hello.exe來(lái)運(yùn)行這個(gè)文件,你會(huì)發(fā)現(xiàn)終端成功輸出Hello World,這代表成功運(yùn)行。
至于這個(gè).vscode文件夾,是當(dāng)前文件夾里的一些配置文件(比如這里的task.json,它其中寫(xiě)入了使用什么編譯器,編譯器的路徑等信息)。
{
"version": "2.0.0",
"tasks": [
{//這個(gè)大括號(hào)里是‘構(gòu)建(build)’任務(wù)
"label": "build", //任務(wù)名稱,可以更改,不過(guò)不建議改
"type": "shell", //任務(wù)類型,process是vsc把預(yù)定義變量和轉(zhuǎn)義解析后直接全部傳給command;shell相當(dāng)于先打開(kāi)shell再輸入命令,所以args還會(huì)經(jīng)過(guò)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", // 開(kāi)啟額外警告
//"-static-libgcc", // 靜態(tài)鏈接libgcc
"-fexec-charset=GBK", // 生成的程序使用GBK編碼,不加這一條會(huì)導(dǎo)致Win下輸出中文亂碼
"-std=c11", // 語(yǔ)言標(biāo)準(zhǔn),可根據(jù)自己的需要進(jìn)行修改,寫(xiě)c++要換成c++的語(yǔ)言標(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ì)編譯來(lái)說(shuō),設(shè)為true沒(méi)有意義,因?yàn)檫\(yùn)行的時(shí)候才涉及到輸入
"panel": "new" //每次執(zhí)行這個(gè)task時(shí)都新建一個(gè)終端面板,也可以設(shè)置為shared,共用一個(gè)面板,不過(guò)那樣會(huì)出現(xiàn)‘任務(wù)將被終端重用’的提示,比較煩人
},
"problemMatcher": "$gcc" //捕捉編譯時(shí)編譯器在終端里顯示的報(bào)錯(cuò)信息,將其顯示在vs code的‘問(wèn)題’面板里
},
{//這個(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", //這一組是‘測(cè)試’組,將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"
}
}
]
}
調(diào)試程序
接下來(lái)我們說(shuō)調(diào)試,VS code的調(diào)試快捷鍵是 F5,按下 F5,會(huì)出現(xiàn)調(diào)試器選擇界面:
選擇GDB,再選擇gcc,你會(huì)發(fā)現(xiàn)終端那里跳轉(zhuǎn)到了調(diào)試控制臺(tái),并且 .vscode 文件夾下面又多了一個(gè) launch.json 文件,上文我們已經(jīng)說(shuō)過(guò)了 .vscode文件夾存放當(dāng)前工作文件夾的一些配置文件。
- 例如task.json其實(shí)是編譯運(yùn)行的配置文件,這里的launch.json文件就是調(diào)試相關(guān)的配置文件,詳解如下:
{
"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)試開(kāi)始前執(zhí)行的任務(wù),我們?cè)谡{(diào)試前要編譯構(gòu)建。與tasks.json的label相對(duì)應(yīng),名字要一樣
}]
}
我們來(lái)試著調(diào)試程序,按下 F9 是為當(dāng)前所在行設(shè)置斷點(diǎn)。當(dāng)然你也可以將 launch.json 文件中的 "stopAtEntry": false改為true。
這樣程序會(huì)在main函數(shù)開(kāi)始暫停,相當(dāng)于在main函數(shù)的起步打斷點(diǎn),進(jìn)入調(diào)試之后 VS code 會(huì)給出一個(gè)調(diào)試工具,長(zhǎng)這樣:
從左到右一次為:
● 繼續(xù)(F5)
● 單步跳過(guò)(F10)
● 單步調(diào)試(F11)
● 單步跳出(shift+F11)
● 重啟(shift+ctrl+F5)
● 停止(shift+F5)
同時(shí)你可以在左邊的變量區(qū)域監(jiān)視變量變化情況,這些都是基本的調(diào)試功能,這里不再闡述。
結(jié)束語(yǔ)
到這里為止我們已經(jīng)把 VS code 打造成了一個(gè) C 和 C++ 的開(kāi)發(fā)環(huán)境,并嘗試了編譯運(yùn)行和調(diào)試。
你可以拋棄笨拙 VC 6 和調(diào)試不方便的 Dev C++ 轉(zhuǎn)而使用 VS code 編寫(xiě)調(diào)試 C/C++ 的程序了,祝你用的開(kāi)心!