本文絕大部分內容來自:https://zhuanlan.zhihu.com/p/147366852,僅根據自身在 ubuntu 上的配置作了些許修改
如果是想了解下 vscode 的配置文件,或者 vscode 配置 c++學習環境,建議直接看原文,本文刪了些基礎步驟。
很多大學的計算機專業用的入門語言都是C語言,通常老師會給學生指定一款IDE來進行程序的編寫,比如vc++6.0、Code::Blocks、Dev c++,可是這些IDE大都比較老舊,用起來有很多不順暢的地方,而且界面粗糙,一點都沒有印象中程序員該有的那種炫酷的感覺,所以尋找一款現代化的、功能強大的編輯器/IDE對於一些人來說還是很有必要的。
也許有人說這些IDE開箱即用,不需要額外配置,對於什么都還不了解的新人來說很合適。我認為這是有道理的,但不應當妨礙一個有好奇心和折騰欲的學生去嘗試其他的編程工具,我個人認為愛折騰對計算機專業的學生來說是一項可貴的品質,折騰工具、搭建環境的過程中可以學到很多有用的東西,這是與計算機交流的過程,也是每一個進入代碼世界的人的必經之路,只是要學會克制,不要把時間全花在折騰工具和環境上。
擁有一套自己精心配置的編程工具,可以幫助計算機新人更快地走進代碼的世界,提高對編程、對學業的興趣。
目前網上有大量的關於vscode的文章和教程,但我沒有找到一篇細致的、面向小白的、搭建語言學習環境而非實際開發環境的教程,很多教程只是寫了怎樣配置,卻沒有寫為什么要這樣配置,我自己搞清楚其中種種后決定記錄下來。
為什么是VSCode?
VSCode是微軟出品的輕量級編輯器,定位是文本編輯器,開源,免費,海量插件,外觀出色,簡潔流暢,支持眾多編程語言,支持三大操作系統Windows、Linux、MacOS。總之,這是一款足夠強大和優雅的編輯器,你值得擁有。
與VScode(Visual Studio Code)名字相像的VS(Visual Studio)是微軟的IDE,而VScode是編輯器,兩者定位不同,一個藍色一個紫色,不要搞混了。
本文文章內容主要是 win10環境,后續會加上 ubuntu 20.04 上 vscode 多文件編譯的配置,mac os 可以參考思想。
本文以 C 為例,涉及到不同的地方有標注
讓我們開始這場vscode的配置之旅
Step 0 基本概念
小白之所以是小白,就在於很多東西不知道、不了解、沒見過、沒用過,在你配置編程工具的過程中,你會遇到很多課本里沒有、老師課上沒說的東西、概念,這也是為什么很多人說配置vscode太麻煩了的原因,這種時候,善用搜索引擎,遇到不懂的東西、沒見過的名詞,上網查一下,大概了解一下是什么再接着往下看就行了。
在這篇文章中,我會盡量解釋清楚每個對你來說可能陌生的東西,不過仍然有可能會有你不明白的地方,網上查一下就好。
最一開始,你應當了解如下概念:
-
編程是怎樣的一個過程:
首先用文本編輯器編寫源代碼 -> 編譯源代碼 生成目標代碼-> 將目標代碼與其它代碼(如庫函數代碼、標准啟動代碼)鏈接起來 -> 生成可執行代碼 -
區分編輯器、編譯器、IDE:
編輯器就是處理文本(源碼)的程序,寫代碼寫的就是文本,編輯器可能提供智能提示、代碼高亮等輔助功能,但不負責源碼到二進制文件的操作;編譯器就是負責將源碼文本翻譯成計算機能夠理解和執行的二進制文件的程序;
集成開發環境(IDE,Integrated Development Environment )是用於提供程序開發環境的應用程序,包括了代碼編輯器、編譯器、調試器和圖形用戶界面工具。集成了代碼編寫、分析、編譯、調試等一整套工具鏈。
-
什么是搭建環境:
vscode定位代碼編輯器,不是IDE,不包含編譯功能,因此需要我們自己安裝編譯器、調試器等編譯器套件,並使兩者有效的配合起來,以實現快捷操作。把這一整套工具鏈整合到一起的過程就是我們所說的搭建環境。ok,到這里,我們就清楚要做什么了:獲取編輯器 -> 獲取編譯套裝(編譯器、調試器、頭文件庫等) -> 做好兩者之間的溝通工作(配置文件)
Step 1 下載安裝
兩個東西:編輯器和編譯套裝
編輯器就是我們的vscode了,到官網https://code.visualstudio.com/
下載安裝:
雙擊打開下載好的程序進行安裝,安裝到默認位置或者你自定義的位置,安裝過程中注意這個界面:
這幾個選項建議全部勾上。
然后是編譯套裝
編譯工具我們選用gcc(全稱GNU Compiler Collection 意思是GNU編譯器套件),不過不是原版的gcc,而是它在Windows下的特制版MinGW(全稱Minimalist GNU on Windows)。它實際上是將GCC 移植到了 Windows 平台下,並且包含了 Win32API ,因此可以將源代碼編譯為可在 Windows 中運行的可執行程序。而且還可以使用一些 Windows 不具備的,Linux平台下的開發工具。MinGW又分為MinGW-w64 與 MinGW ,區別在於 MinGW 只能編譯生成32位可執行程序,而 MinGW-w64 則可以編譯生成 64位 或 32位 可執行程序。MinGW 現已被 MinGW-w64 所取代,且 MinGW 也已停止了更新。
因此,我們最終下載安裝的是MinGW-w64
下載地址:https://sourceforge.net/projects/mingw-w64/files/
下載下來后是一個壓縮文件,將它解壓縮(解壓縮軟件推薦Bandizip)得到mingw64文件夾,然后把它拖動到一個合適的位置(或者直接解壓縮到這個位置),地址中不要有中文
你可以打開bin目錄看下,里面有很多后綴名是.exe 的可執行程序,這些就是開發時所需的工具,如:gcc.exe 是C語言程序的編譯器,g++.exe 是C++語言的編譯器,gdb.exe 是用來調試程序的 debug 工具。
還有一些頭文件也里面,如stdio.h的位置是C:\Program Files\mingw64\x86_64-w64-mingw32\include
然后,為了讓程序能訪問到這些編譯程序,需要把它們所在的目錄(我這里是C:\Program File\mingw64\bin,點擊地址欄進行復制)添加到環境變量Path中。
環境變量是 Windows 系統中用來指定運行環境的一些參數,它包含了關於系統及當前登錄用戶的環境信息字符串。當用戶運行某些程序時,系統除了會在當前文件夾中尋找某些文件外,還會到環境參數的默認路徑中去查找程序運行時所需要的系統文件。
環境變量配置后,可以驗證一下,搜索打開cmd命令提示符,輸入gcc --version(中間有空格),按回車,看到如下信息 :
Step 2 文件結構
文件結構就是你組織文件夾、文件,決定他們怎樣嵌套、怎樣從屬的方法。
這一步是區分搭建的是語言學習環境還是實際項目開發環境的關鍵。
這兩者有什么區別呢?想想你寫hello world時是怎樣寫的,你寫了一個單文件,只有一個.c文件,然后你按下綠色三角進行編譯運行生成.exe可執行文件,語言學習環境大都是這樣的單文件編譯運行調試,或者是涉及到簡單的幾個頭文件和源文件的組合這樣的多文件結構。而實際項目開發呢,實際中的一個小項目的目錄結構可能長這樣:
我們的語言學習環境不是這樣的,我們用不到lib、build、makefile等文件夾/文件,我們的目錄結構應當方便我們新建一個單文件,然后編譯調試,這些文件還應當在一起以方便查看和管理
具體怎么操作:
建議把代碼都組織在一個地方,以方便管理。以我為例,我在C盤根目錄建了一個名叫Codefield的文件夾,我所有代碼相關的東西都組織在這里面。
現在,打開文件資源管理器,找一個合適的地方,創建一個這樣的Codefield文件夾(文件夾的名字你也可以改成別的,注意路徑中不要出現中文和空格,因為gcc調試器不支持中文路徑),然后在這個文件夾下再新建一個文件夾CODE_C,你所有的c語言代碼就放在這里面,由於vscode以文件夾組織項目,而我們涉及到單文件和簡單的多文件兩種情景,所以在CODE_C下再新建兩個文件夾C_Single 和 C_Multiple ,這兩個就是我們的工作區文件夾了。
今后,涉及到其他代碼相關的東西時,你就可以在Codefield文件夾下組織了,比如再學一門C++語言時,建一個CODE_Cpp文件夾;玩leetcode刷算法的時候,建一個Leetcode文件夾;從github克隆別人的項目時,建一個Github文件夾;自己做項目時,建個Projects文件夾……
現在,讓我們看一下工作區文件夾,以C_Single為例,這其中的文件結構又該怎么組織?(這一步你不需要建文件,弄明白結構就好)首先要有一個.vscode文件夾(這是vscode的配置文件所在處,下一步會詳細講),然后就是我們的源文件,在學習過程中,通常會寫很多的源文件,把他們全堆在一起顯然不夠優雅,我們對這些源文件進行一下分類,比如按章節分:
或者按類型分:
具體怎么分可以看你的學習情況。還有一個問題,源碼編譯后會生成exe可執行文件,它們放在哪里?和源文件放在一起的話,當文件夾下文件多起來時會非常雜亂,因此我們選擇把exe文件統一放在bin文件夾下,這個bin文件夾不應當直接放在工作區文件夾下,這樣會造成不同的源碼分類文件夾下的文件都不能重名,於是我們在每一個分類文件夾下都建一個bin文件夾,最終效果如下:
C_Mutile類似但有所不同,由於一組程序由多個文件構成,我們把這C_Single中的單個源文件替換成文件夾就好,每個文件夾里面就是一組源文件,並且exe文件也放在其中,不需要單獨的bin目錄。
至此,你有了一個合適的文件結構,我們可以開始進行 vscode 的配置了。
Step 3 vscode 基礎配置
這一步開始前,我們再來了解幾個概念。
命令行:命令行 或 命令行界面,是一種基於文本的用來查看、處理、和操作計算機上的文件和程序的工具。
終端/控制台:普通用戶可以簡單的把終端和控制台理解為:可以輸入命令行並顯示程序運行過程中的信息以及程序運行結果的窗口。 不必要嚴格區分這兩者的差別。
shell:終端自身並不執行用戶輸入的命令,它只是負責把輸入的內容傳送到主機系統,並把主機系統返回的結果呈現給用戶。負責解釋執行用戶輸入的命令並返回結果的,正是Shell,它是溝通用戶和系統內核的中間橋梁。
現在思考一個問題,我們搭的這套環境中編輯器選的是vscode,但理論上任何能處理文本的編輯器都能用來寫代碼,比如Windows自帶的記事本,你可以在桌面新建一個txt文件,命名為hello,然后用記事本寫個helloworld程序進去,再把這個文件后綴改成.c,這就是一個源代碼文件了,我們該如何對它進行編譯運行呢?答案是通過命令行,我們已經安裝了編譯器套裝並把它添加進了環境變量,現在可以使用gcc命令了:搜索打開cmd命令提示符,默認進入的是用戶目錄,輸入cd desktop 進入桌面目錄,像這樣:
然后輸入編譯命令 gcc -o hello hello.c(注意空格),按下回車,你會發現桌面多了hello.exe文件,這說明我們成功編譯生成了可執行文件,然后再在命令行中輸入hello.exe運行程序 。
這樣每次都用命令行太麻煩了,我們希望用更快捷的方式執行這一過程,但記事本不是專門給你寫代碼的,它不能提供這樣的配置,但是vscode就不一樣了,專門寫代碼的編輯器當然有專門的方式讓你快捷地編譯運行。這是通過.vscode文件夾下的json配置文件實現的,這些json文件怎么寫是由vscode開發團隊規定的(感興趣可以去看官方的文檔),其中一個是tasks.json,task是任務的意思,我們的編譯和運行就是我們想要vscode執行的任務,為此我們要在tasks.json里寫兩個task:Build和Run(這里為什么不是Compile呢?是因為從源碼到可執行的過程中不僅是編譯(Compile),還有預編譯、鏈接等過程,用構建(Build)來表述更合適)。除了編譯和運行,我們還需要進行調試(Debug),這個就不是通過task來實現的了,而是通過launch.json文件來實現。
現在,打開vscode,發現全是英文,我們先裝個漢化插件:
然后搜索C/C++安裝這個插件,這是對語言的支持插件
重啟vscode,打開C_Single文件夾:
注意要 文件->打開文件夾 這樣打開,vscode中打開的根目錄是C_Single
然后新建.vscode文件夾(注意前面有個.),然后在里面新建tasks.json和launch.json
Step 3 vscode 配置文件(Linux + windows)
windows 單文件
tasks.json
{
"version": "2.0.0",
"tasks": [
{//這個大括號里是‘構建(build)’任務
"label": "build", //任務名稱,可以更改,不過不建議改
"type": "shell", //任務類型,process是vsc把預定義變量和轉義解析后直接全部傳給command;shell相當於先打開shell再輸入命令,所以args還會經過shell再解析一遍
"command": "gcc", //編譯命令,這里是gcc,編譯c++的話換成g++
"args": [ //方括號里是傳給gcc命令的一系列參數,用於實現一些功能
"${file}", //指定要編譯的是當前文件
"-o", //指定輸出文件的路徑和名稱
"${fileDirname}\\bin\\${fileBasenameNoExtension}.exe", //承接上一步的-o,讓可執行文件輸出到源碼文件所在的文件夾下的bin文件夾內,並且讓它的名字和源碼文件相同
"-g", //生成和調試有關的信息
"-Wall", // 開啟額外警告
"-static-libgcc", // 靜態鏈接libgcc
"-fexec-charset=GBK", // 生成的程序使用GBK編碼,不加這一條會導致Win下輸出中文亂碼
"-std=c11", // 語言標准,可根據自己的需要進行修改,寫c++要換成c++的語言標准,比如c++11
],
"group": { //group表示‘組’,我們可以有很多的task,然后把他們放在一個‘組’里
"kind": "build",//表示這一組任務類型是構建
"isDefault": true//表示這個任務是當前這組任務中的默認任務
},
"presentation": { //執行這個任務時的一些其他設定
"echo": true,//表示在執行任務時在終端要有輸出
"reveal": "always", //執行任務時是否跳轉到終端面板,可以為always,silent,never
"focus": false, //設為true后可以使執行task時焦點聚集在終端,但對編譯來說,設為true沒有意義,因為運行的時候才涉及到輸入
"panel": "new" //每次執行這個task時都新建一個終端面板,也可以設置為shared,共用一個面板,不過那樣會出現‘任務將被終端重用’的提示,比較煩人
},
"problemMatcher": "$gcc" //捕捉編譯時編譯器在終端里顯示的報錯信息,將其顯示在vscode的‘問題’面板里
},
{//這個大括號里是‘運行(run)’任務,一些設置與上面的構建任務性質相同
"label": "run",
"type": "shell",
"dependsOn": "build", //任務依賴,因為要運行必須先構建,所以執行這個任務前必須先執行build任務,
"command": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe", //執行exe文件,只需要指定這個exe文件在哪里就好
"group": {
"kind": "test", //這一組是‘測試’組,將run任務放在test組里方便我們用快捷鍵執行
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true, //這個就設置為true了,運行任務后將焦點聚集到終端,方便進行輸入
"panel": "new"
}
}
]
}
launch.json
{
"version": "0.2.0",
"configurations": [
{//這個大括號里是我們的‘調試(Debug)’配置
"name": "Debug", // 配置名稱
"type": "cppdbg", // 配置類型,cppdbg對應cpptools提供的調試功能;可以認為此處只能是cppdbg
"request": "launch", // 請求配置類型,可以為launch(啟動)或attach(附加)
"program": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe", // 將要進行調試的程序的路徑
"args": [], // 程序調試時傳遞給程序的命令行參數,這里設為空即可
"stopAtEntry": false, // 設為true時程序將暫停在程序入口處,相當於在main上打斷點
"cwd": "${fileDirname}", // 調試程序時的工作目錄,此處為源碼文件所在目錄
"environment": [], // 環境變量,這里設為空即可
"externalConsole": false, // 為true時使用單獨的cmd窗口,跳出小黑框;設為false則是用vscode的內置終端,建議用內置終端
"internalConsoleOptions": "neverOpen", // 如果不設為neverOpen,調試時會跳到“調試控制台”選項卡,新手調試用不到
"MIMode": "gdb", // 指定連接的調試器,gdb是minGW中的調試程序
"miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe", // 指定調試器所在路徑,如果你的minGW裝在別的地方,則要改成你自己的路徑,注意間隔是\\
"preLaunchTask": "build" // 調試開始前執行的任務,我們在調試前要編譯構建。與tasks.json的label相對應,名字要一樣
}]
}
windows 多文件
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "gcc", //寫c++換成g++
"args": [
"${fileDirname}\\*.c", //寫c++把 *.c 換成 *.cpp
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"-g",
"-Wall",
"-static-libgcc",
"-fexec-charset=GBK",
"-std=c11", //寫c++換成c++標准
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "new"
},
"problemMatcher": "$gcc"
},
{
"label": "run",
"type": "shell",
"dependsOn": "build",
"command": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "new"
}
}
]
}
launch.json
{
"version": "0.2.0",
"configurations": [{
"name": "Debug",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"internalConsoleOptions": "neverOpen",
"MIMode": "gdb",
"miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe",
"preLaunchTask": "build"
}]
}
linux 單文件
task.json
{
"version": "2.0.0",
"tasks": [
{//這個大括號里是‘構建(build)’任務
"label": "build", //任務名稱,可以更改,不過不建議改
"type": "shell", //任務類型,process是vsc把預定義變量和轉義解析后直接全部傳給command;shell相當於先打開shell再輸入命令,所以args還會經過shell再解析一遍
"command": "g++", //編譯命令,這里是gcc,編譯c++的話換成g++
"args": [ //方括號里是傳給gcc命令的一系列參數,用於實現一些功能
"${file}", //指定要編譯的是當前文件
"-o", //指定輸出文件的路徑和名稱
"${fileDirname}/${fileBasenameNoExtension}", //承接上一步的-o,讓可執行文件輸出到源碼文件所在的文件夾下的bin文件夾內,並且讓它的名字和源碼文件相同
"-g", //生成和調試有關的信息
// "-Wall", // 開啟額外警告
// "-static-libgcc", // 靜態鏈接libgcc
// "-fexec-charset=GBK", // 生成的程序使用GBK編碼,不加這一條會導致Win下輸出中文亂碼
// "-std=c11", // 語言標准,可根據自己的需要進行修改,寫c++要換成c++的語言標准,比如c++11
],
"group": { //group表示‘組’,我們可以有很多的task,然后把他們放在一個‘組’里
"kind": "build",//表示這一組任務類型是構建
"isDefault": true//表示這個任務是當前這組任務中的默認任務
},
"presentation": { //執行這個任務時的一些其他設定
"echo": true,//表示在執行任務時在終端要有輸出
"reveal": "always", //執行任務時是否跳轉到終端面板,可以為always,silent,never
"focus": false, //設為true后可以使執行task時焦點聚集在終端,但對編譯來說,設為true沒有意義,因為運行的時候才涉及到輸入
"panel": "new" //每次執行這個task時都新建一個終端面板,也可以設置為shared,共用一個面板,不過那樣會出現‘任務將被終端重用’的提示,比較煩人
},
"problemMatcher": "$gcc" //捕捉編譯時編譯器在終端里顯示的報錯信息,將其顯示在vscode的‘問題’面板里
},
{//這個大括號里是‘運行(run)’任務,一些設置與上面的構建任務性質相同
"label": "run",
"type": "shell",
"dependsOn": "build", //任務依賴,因為要運行必須先構建,所以執行這個任務前必須先執行build任務,
"command": "${fileDirname}/${fileBasenameNoExtension}", //執行exe文件,只需要指定這個exe文件在哪里就好
"group": {
"kind": "test", //這一組是‘測試’組,將run任務放在test組里方便我們用快捷鍵執行
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true, //這個就設置為true了,運行任務后將焦點聚集到終端,方便進行輸入
"panel": "new"
}
}
]
}
launch.json
{
"version": "0.2.0",
"configurations": [
{ //這個大括號里是我們的‘調試(Debug)’配置
"name": "Debug", // 配置名稱
"type": "cppdbg", // 配置類型,cppdbg對應cpptools提供的調試功能;可以認為此處只能是cppdbg
"request": "launch", // 請求配置類型,可以為launch(啟動)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}", // 將要進行調試的程序的路徑
"args": [], // 程序調試時傳遞給程序的命令行參數,這里設為空即可
"stopAtEntry": false, // 設為true時程序將暫停在程序入口處,相當於在main上打斷點
"cwd": "${fileDirname}", // 調試程序時的工作目錄,此處為源碼文件所在目錄
"environment": [], // 環境變量,這里設為空即可
"externalConsole": false, // 為true時使用單獨的cmd窗口,跳出小黑框;設為false則是用vscode的內置終端,建議用內置終端
"MIMode": "gdb", // 指定連接的調試器,gdb是minGW中的調試程序
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
// "internalConsoleOptions": "neverOpen", // 如果不設為neverOpen,調試時會跳到“調試控制台”選項卡,新手調試用不到
"miDebuggerPath": "/usr/bin/gdb", // 指定調試器所在路徑
"preLaunchTask": "build" // 調試開始前執行的任務,我們在調試前要編譯構建。與tasks.json的label相對應,名字要一樣
}
]
}
linux 多文件
windows 與 linux 的主要差異在於路徑不同,其他的大同小異,ubuntu 會自帶 g++/gcc,可以使用 whereis 命令查看所在目錄
單文件和多文件的差別主要在於參數是 "${fileDirname}/*.cpp" 還是 "${file}"。
linux 路徑注意不要有空格,否則很容易發生找不到文件的情況
tasks.json
{
"version": "2.0.0",
"tasks": [
{//這個大括號里是‘構建(build)’任務
"label": "build", //任務名稱,可以更改,不過不建議改
"type": "shell", //任務類型,process是vsc把預定義變量和轉義解析后直接全部傳給command;shell相當於先打開shell再輸入命令,所以args還會經過shell再解析一遍
"command": "g++", //編譯命令,這里是gcc,編譯c++的話換成g++
"args": [ //方括號里是傳給gcc命令的一系列參數,用於實現一些功能
"${fileDirname}/*.cpp", //指定要編譯的是當前文件
"-o", //指定輸出文件的路徑和名稱
"${fileDirname}/${fileBasenameNoExtension}", //承接上一步的-o,讓可執行文件輸出到源碼文件所在的文件夾下的bin文件夾內,並且讓它的名字和源碼文件相同
"-g", //生成和調試有關的信息
// "-Wall", // 開啟額外警告
// "-static-libgcc", // 靜態鏈接libgcc
// "-fexec-charset=GBK", // 生成的程序使用GBK編碼,不加這一條會導致Win下輸出中文亂碼
// "-std=c11", // 語言標准,可根據自己的需要進行修改,寫c++要換成c++的語言標准,比如c++11
],
"group": { //group表示‘組’,我們可以有很多的task,然后把他們放在一個‘組’里
"kind": "build",//表示這一組任務類型是構建
"isDefault": true//表示這個任務是當前這組任務中的默認任務
},
"presentation": { //執行這個任務時的一些其他設定
"echo": true,//表示在執行任務時在終端要有輸出
"reveal": "always", //執行任務時是否跳轉到終端面板,可以為always,silent,never
"focus": false, //設為true后可以使執行task時焦點聚集在終端,但對編譯來說,設為true沒有意義,因為運行的時候才涉及到輸入
"panel": "new" //每次執行這個task時都新建一個終端面板,也可以設置為shared,共用一個面板,不過那樣會出現‘任務將被終端重用’的提示,比較煩人
},
"problemMatcher": "$gcc" //捕捉編譯時編譯器在終端里顯示的報錯信息,將其顯示在vscode的‘問題’面板里
},
{//這個大括號里是‘運行(run)’任務,一些設置與上面的構建任務性質相同
"label": "run",
"type": "shell",
"dependsOn": "build", //任務依賴,因為要運行必須先構建,所以執行這個任務前必須先執行build任務,
"command": "${fileDirname}/${fileBasenameNoExtension}", //執行exe文件,只需要指定這個exe文件在哪里就好
"group": {
"kind": "test", //這一組是‘測試’組,將run任務放在test組里方便我們用快捷鍵執行
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true, //這個就設置為true了,運行任務后將焦點聚集到終端,方便進行輸入
"panel": "new"
}
}
]
}
launch.json
{
"version": "0.2.0",
"configurations": [
{ //這個大括號里是我們的‘調試(Debug)’配置
"name": "Debug", // 配置名稱
"type": "cppdbg", // 配置類型,cppdbg對應cpptools提供的調試功能;可以認為此處只能是cppdbg
"request": "launch", // 請求配置類型,可以為launch(啟動)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}", // 將要進行調試的程序的路徑
"args": [], // 程序調試時傳遞給程序的命令行參數,這里設為空即可
"stopAtEntry": false, // 設為true時程序將暫停在程序入口處,相當於在main上打斷點
"cwd": "${fileDirname}", // 調試程序時的工作目錄,此處為源碼文件所在目錄
"environment": [], // 環境變量,這里設為空即可
"externalConsole": false, // 為true時使用單獨的cmd窗口,跳出小黑框;設為false則是用vscode的內置終端,建議用內置終端
"MIMode": "gdb", // 指定連接的調試器,gdb是minGW中的調試程序
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
// "internalConsoleOptions": "neverOpen", // 如果不設為neverOpen,調試時會跳到“調試控制台”選項卡,新手調試用不到
"miDebuggerPath": "/usr/bin/gdb", // 指定調試器所在路徑
"preLaunchTask": "build" // 調試開始前執行的任務,我們在調試前要編譯構建。與tasks.json的label相對應,名字要一樣
}
]
}