首先要感謝的是這位大神: 看了他的文章之後,我恍然大悟
一.回到主題,在了解兩個json檔案之前,我們先看一下g++是如何工作的:
0.通過》g++ --version 檢視是否安裝了g++,如果沒有安裝,請自行安裝
1.隨便找乙個資料夾,我們先寫乙個main.cpp
1 #include22.在當前資料夾下開啟終端,輸入》 g++ -g -c main.cpp 後,當前檔案空間下會出現 main.o3int main(void
)
3.在終端中繼續輸入 g++ -o main.out main.o 後,檔案空間下將會出現 main.out(可執行檔案)
4.在終端中輸入 ./main.out 即可執行
關於g++的基本用法,可以參考一下(這位大神的文章:其實也很簡單就是乙個編譯與鏈結的過程, -c只編譯生成目標檔案並沒有形成可執行檔案, -o 編譯加鏈結直接生成了可執行檔案 .out,所以上面的命令也可以簡化為: g++ -o main.out main.cpp
二.1.進入vscode,開啟剛才main.cpp所在的資料夾空間(可以刪除那些 .o 或 .out 檔案)
2.我們按f5進行除錯,出現除錯環境選擇
3.選擇c++(gdb/lldb)環境後,出現了許多除錯任務的模板,我們選擇最後乙個 '預設配置' 選項,然後開始配置launch.json
14.再次f5調試試一下,當然是報錯找不到任務 hello 了,因為你還沒有寫task.json檔案啊/a.out", //解釋一下, $是當前檔案空間的相對路徑 a.out是目標檔案
12//
a.out我們完全可以修改,我們就修改成 $.out
1314 "program": "$/$.out",
15//
至於 workspacefolder filebasenamenoextension見名思意
16//
另外關於.json中的各種替換變數的意思詳見下面這位大神的文章:
17//
18 "args": ,
19 "stopatentry": false
,20 "cwd": "$",
21 "environment": ,
22 "externalconsole": false
,23 "mimode": "gdb",
24 "setupcommands": [
2530
],31
32 "prelaunchtask": "hello" //
預設不會生成,但是非常重要,因為launch.json檔案負責啟動任務,簡單說就是執行檔案,這個要與 task.json 中的 label 名稱一致
33//
而task.json檔案就是負責配置相關任務,簡單說就是負責編譯與鏈結並生成可執行檔案.所以launch.json檔案前,必須要執行task.json檔案34}
35]36 }
5.按下 ctr+shift+p 進入搜尋框,找到任務配置
6.點選任務配置後,就出現了任務配置的模板選項
7.選擇'使用模板'建立
8.然後在選擇others,就出現了task.json
19.再f5除錯一下,就可以了,還可以新增斷點除錯(這不,執行成功了)",16 "-o",
17 "$.out"18]
19}20]
21 }
三.你以為結束了,no,你還是太天真了
雖然這樣可以實現單個檔案的編譯鏈結與執行,但是對於多檔案來說卻不行:
0.說明一下,這裡的多檔案是指:包含多個.cpp檔案(多個.h與乙個.cpp不算作多檔案,因為可以通過鏈結到一起)
1.我們直接舉個例子吧,新建a.h
12.新建a.cpp#ifndef a_h
2#define a_h34
class a;
89 #endif
1 #include2 #include"a.h"343.修改main.cppvoid
a::say()
1 #include2 #include"a.h"344.f5試一試,報錯:沒定義介面 a::say(). 為什麼會這樣,仔細看a.h,因為我們定義了乙個方法,但是沒有實現他,這又不是抽象類,所以必須要實現方法,你在main.cpp中呼叫該方法,但是該方法在a.h中沒有實現,main.cpp鏈結a.h後,編譯器仍然不認識他,所以就會報錯int main(void
)
四.0.通過 make --version 檢視有沒有安裝make,沒有安裝請自行安裝
1.怎麼解決呢,這個時候就用到make了,make是通過巢狀使用g++ 實現多檔案的編譯,make是怎麼執行的呢? 首先,make指令,會查詢你指定的檔案空間下有沒有makefile檔案,如何makefile存在就按照makefile中的內容執行,算了,說不明白,還是看下面的例子吧.
2.在當前檔案空間下新建檔案, 檔名為makefile (如圖)
3.修改task.json
14.修改launch.json , 就該了一處 "program": "$/hello1", //因為要與makefile定義的檔名相匹配",18
"-o",
19"$.out"20]
*/21 "args": [ //
應該是可寫可不寫,關於檔案路徑這一塊有很多的坑,希望大家注意
22 "-c",
23 "$"24]
25}26]
27 }
5.makefile 內容如下: 我寫了兩個版本,其實本質上都是一樣的,大家可以體會一下,另外希望大家可以自行學習make命令的語法以及使用,在這裡我暫不贅述(其實自己不是很懂,哈哈)
1hello1: main.o a.o
2 g++ -g -o hello1 main.cpp a.cpp #一定要縮排,而且必須是tab鍵縮排,不信,你試試
3clean:
4 rm main.o a.o
16.f5 , perfect!hello1: main.o a.o
2 g++ -o hello1 main.o a.o #一定要縮排,而且必須是tab鍵縮排,不信,你試
3main.o: main.cpp a.h
4 g++ -g -c main.cpp
5a.o: a.h a.cpp
6 g++ -g -c a.cpp
7clean:
8rm main.o a.o
9
五.結束
以此篇紀念我linux之旅的開始,加油!
Mac下配置vscode C 開發環境
背景 之前看網上的配置,可以正常執行,但是除錯總是不行 安裝外掛程式c c c c clang command adapter,codelldb 用來debug,解決catalina不支援lldb除錯問題 以及code runner 用來編譯 言簡意賅,一共要3個檔案 c cpp propertie...
VScode C 環境配置
自己平台是mac,之前一直用clion 版本 2019.1 寫c 對於clion,有兩個缺點一直都很忍受,奈何無奈mac平台的vs一直不支援c 一直默默忍受著。一直老是卡住,經常性寫乙個cout就一直卡,難以理解這麼基本的語句為何會頻繁卡頓。執行速度超級慢,定義乙個物件,使用物件函式的時候,函式提示...
配置VScode c語言環境
成成最近用到c語言了,之前比較喜歡用在vscode上面用python除錯,今天我參考了一些文章,也嘗試了下在vscode上配置c語言的除錯,其中包含一些相關的基礎知識。安裝在d mingw 下就好 自己新建乙個資料夾 然後開啟後這個樣子 然後安裝好編譯器,下面設定環境變數,讓系統能夠自動找到gcc命...