準(zhǔn)備工作
- 安裝vscode盯荤。
- 安裝vscode的c++擴(kuò)展。
- 確保安裝clang焕盟。
創(chuàng)建項(xiàng)目
# 創(chuàng)建項(xiàng)目目錄
mkdir projects
cd projects
mkdir helloworld
cd helloworld
# 以當(dāng)前路徑作為工作空間秋秤,打開(kāi)vscode
code .
task.json
task.json文件用于指示vscode構(gòu)建項(xiàng)目。
{
"version": "2.0.0",
"tasks": [{
"label": "Compile", // 任務(wù)名稱脚翘,與launch.json的preLaunchTask相對(duì)應(yīng)
"command": "g++", // 要使用的編譯器灼卢,C++用g++
"args": [
"${file}",
"-o", // 指定輸出文件名,不加該參數(shù)則默認(rèn)輸出a.exe来农,Linux下默認(rèn)a.out
"${fileDirname}/${fileBasenameNoExtension}",
"-g", // 生成和調(diào)試有關(guān)的信息
"-m64", // 強(qiáng)制生成64位的程序
"-Wall", // 開(kāi)啟額外警告
], // 編譯的命令鞋真,其實(shí)相當(dāng)于VSC幫你在終端中輸了這些東西
"type": "process", // process是把預(yù)定義變量和轉(zhuǎn)義解析后直接全部傳給command;shell相當(dāng)于先打開(kāi)shell再輸入命令沃于,所以args還會(huì)經(jīng)過(guò)shell再解析一遍
"group": {
"kind": "build",
"isDefault": true // 不為true時(shí)ctrl shift B就要手動(dòng)選擇了
},
"presentation": {
"echo": true,
"reveal": "always", // 執(zhí)行任務(wù)時(shí)是否跳轉(zhuǎn)到終端面板涩咖,可以為always,silent繁莹,never檩互。具體參見(jiàn)VSC的文檔,即使設(shè)為never咨演,手動(dòng)點(diǎn)進(jìn)去還是可以看到
"focus": false, // 設(shè)為true后可以使執(zhí)行task時(shí)焦點(diǎn)聚集在終端闸昨,但對(duì)編譯C/C++來(lái)說(shuō),設(shè)為true沒(méi)有意義
"panel": "shared" // 不同的文件的編譯信息共享一個(gè)終端面板
},
"problemMatcher":"$gcc" // 捕捉編譯時(shí)終端里的報(bào)錯(cuò)信息到問(wèn)題面板中薄风,修改代碼后需要重新編譯才會(huì)再次觸發(fā)
}]
}
launch.json
// https://code.visualstudio.com/docs/cpp/launch-json-reference
{
"version": "0.2.0",
"configurations": [{
"name": "Launch", // 配置名稱零院,將會(huì)在啟動(dòng)配置的下拉菜單中顯示
"type": "cppdbg", // 配置類型,對(duì)于C/C++可認(rèn)為此處只能是cppdbg村刨,由cpptools提供告抄;不同編程語(yǔ)言不同
"request": "launch", // 可以為launch(啟動(dòng))或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}", // 將要進(jìn)行調(diào)試的程序的路徑
"args": [], // 程序調(diào)試時(shí)傳遞給程序的命令行參數(shù),一般設(shè)為空
"stopAtEntry": true, // 設(shè)為true時(shí)程序?qū)和T诔绦蛉肟谔幥段喈?dāng)于在main上打斷點(diǎn)
"cwd": "${workspaceFolder}", // 調(diào)試程序時(shí)的工作目錄打洼,此為工作區(qū)文件夾龄糊;改成${fileDirname}可變?yōu)槲募谀夸? "environment": [], // 環(huán)境變量
"externalConsole": false, // 使用單獨(dú)的cmd窗口,與其它IDE一致募疮;為false時(shí)使用內(nèi)置終端
"internalConsoleOptions": "neverOpen", // 如果不設(shè)為neverOpen炫惩,調(diào)試時(shí)會(huì)跳到“調(diào)試控制臺(tái)”選項(xiàng)卡,你應(yīng)該不需要對(duì)gdb手動(dòng)輸命令吧阿浓?
"MIMode": "lldb", // 指定連接的調(diào)試器他嚷,可以為gdb或lldb。
"setupCommands": [
{ // 模板自帶芭毙,好像可以更好地顯示STL容器的內(nèi)容筋蓖,具體作用自行Google
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "Compile" // 調(diào)試前執(zhí)行的任務(wù),一般為編譯程序退敦。與tasks.json的label相對(duì)應(yīng)
}]
}
settings.json
{
"files.defaultLanguage": "c", // ctrl+N新建文件后默認(rèn)的語(yǔ)言
"editor.formatOnType": true, // 輸入分號(hào)(C/C++的語(yǔ)句結(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ì)在“輸出”中輸出,無(wú)法輸入
"code-runner.executorMap": {
"c": "gcc '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -lm -static-libgcc -fexec-charset=GBK -D__USE_MINGW_ANSI_STDIO && &'./$fileNameWithoutExt.exe'",
"cpp": "g++ '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -static-libgcc -fexec-charset=GBK && &'./$fileNameWithoutExt.exe'"
// "c": "gcc $fileName -o $fileNameWithoutExt.exe -Wall -O2 -m64 -lm -static-libgcc -fexec-charset=GBK -D__USE_MINGW_ANSI_STDIO && $dir$fileNameWithoutExt.exe",
// "cpp": "g++ $fileName -o $fileNameWithoutExt.exe -Wall -O2 -m64 -static-libgcc -fexec-charset=GBK && $dir$fileNameWithoutExt.exe"
}, // 右鍵run code時(shí)運(yùn)行的命令钝域;未注釋的僅適用于PowerShell(Win10默認(rèn))和pwsh讽坏,文件名中有空格也可以編譯運(yùn)行;注釋掉的適用于cmd(win7默認(rèn))例证、PS和bash路呜,但文件名中有空格時(shí)無(wú)法運(yùn)行
"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是編譯型語(yǔ)言巡社,不適合這樣用
"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的順序(按字母排序)
}