目錄
常用工具:
安裝包管理工具:
?查找含有關鍵字的軟件包
安裝軟件
安裝文件傳輸工具
安裝編輯器
C語言編譯器
C++編譯器
安裝調試器
安裝項目版本管理工具
cmake
卸載軟件
安裝jsoncpp
安裝boost庫
安裝mariadb
安裝tree(讓目錄以tree的形式進行顯示)
卸載:
編輯器vim
vim的使用
普通模式:
插入模式:
底行模式:
基本操作
復制:
粘貼:
剪切/刪除:
撤銷:
對其以及行操作
光標移動:
翻頁:
分屏:
編譯器:
編譯器進行代碼解釋的四個階段:
預處理:
編譯:
匯編:
鏈接:
鏈接:庫
庫文件
動態庫&靜態庫
動態鏈接:
靜態鏈接:
調試器:gdb
可執行程序分為兩類:
debug程序--調試版:
release程序--發布版:
程序調試操作一:
程序調試操作二:
程序調試操作三:
程序調試操作四:
程序調試操作五:
項目的自動化構建工具:make&Makefile
Makefile:
make:
Makefile的編寫規則:
make解釋規則:
預定義變量:
偽對象:
項目版本管理工具:git
常用工具:
主要分類為:安裝包管理工具(軟件商店)、編輯器、編譯器、調試器、項目自動化構建工具、項目版本管理工具、文件傳輸工具。
安裝包管理工具:
?查找含有關鍵字的軟件包
apt-cache search [關鍵字]?
安裝軟件
apt-get install [軟件名]?
安裝文件傳輸工具
apt-get install lrzsz
安裝編輯器
apt-get install vim
C語言編譯器
apt-get install gcc
C++編譯器
apt-get install g++
安裝調試器
apt-get install gdb
安裝項目版本管理工具
apt-get install git
cmake
apt-get install cmake
卸載軟件
apt-get remove [文件名]
安裝jsoncpp
apt-get install libjsoncpp-dev
安裝boost庫
apt-get install libboost-all-dev
安裝mariadb
apt-get install mariadb-server
apt-get install mariadb-client
apt-get install libmariadb-dev
安裝tree(讓目錄以tree的形式進行顯示)
apt-get install tree
卸載:
apt-get remove [軟件名]
編輯器vim
背景:
unix開發出來后,出了第一款類unix平臺編輯器vi,但是vi并不好用,因此vim出現。
vim是一個命令行編輯器,因此默認無法使用鼠標進行操作。
為了能夠使vim使用更加方便,為此設計了多種操作模式,在不同的操作模式下,相同的按鍵會有不同的作用。
vim的使用
操作模式共有12種,而寫代碼的主要只有3種。
普通模式:
是對文檔內容進行命令操作
插入模式:
對文檔內容的編輯
底行模式:
對文檔的保存以及退出操作
vim后邊更上文件名,就可以使用vim打開文件,默認處于普通模式
基本操作
a:從光標后開始插入
o:新建一行
還有大寫I A O
:????????進入底行模式
w 保存
q 退出
q! 強制退出
X 保存并退出
ESC ? ? ? ?進入普通模式
復制:
yy 復制一行 nyy從光標行開始復制n行內容
粘貼:
p np 粘貼n行剪切板內容
剪切/刪除:
dd刪除一行 ndd
x 刪除光標所在的字符
ggdG 從首行刪除到尾行
撤銷:
U 撤銷的撤銷ctrl+r
對其以及行操作
全文對齊:按照代碼風格進行縮進對齊
底行模式輸入:
gg=G 對齊
gg 光標移動到文檔首行
G 光標移動到末位一行
set number 顯示行號
光標移動:
hjkl 左下上右移動光標
w/b 以單詞左右移動
翻頁:
ctrl+f / ctrl+b 上下翻頁
分屏:
進入底行模式輸入vnew,新建一個窗口,分屏操作
ctrl+ww切屏
編譯器:
將高級語言代碼解釋成為機器可識別的指令(不同的語言有不同的編譯器)
C語言:gcc,msvc,clang.....
C++語言:g++
編譯器進行代碼解釋的四個階段:
預處理:
頭文件引用,去除注釋,宏替換...
編譯:
進行語法,語義糾錯,沒有錯誤則將代碼解釋成為匯編指令
匯編:
將匯編指令,解釋成為機器能識別的二進制指令。
鏈接:
將所有的機器代碼(不同.c生成的文件,庫文件)進行打包生成一個可執行程序
gcc編譯器常用選項:
-E 只進行預處理
-S 只進行編譯
-C 只進行匯編
-O 指定生成的文件名稱
如果gcc不跟其他選項,那么生成的就是可執行程序
gcc -E main.c -o main.i
gcc -S main.i -o main.s
gcc -C main.s -o main.o
鏈接:庫
在系統中,有一種文件叫做庫文件:是進行特定功能,提前封裝實現的函數,經過預處理,編譯,匯編,打包之后生成的一個提供給別人使用的代碼文件
庫文件
雖然也是大量的二進制代碼打包文件,但是它沒有main函數。(因為一個代碼里是不能出現兩個main函數的。)
動態庫&靜態庫
編譯器的鏈接方式:
動態鏈接:
鏈接的是動態庫,鏈接的時候,并不會將庫中函數的實現指令給程序中也復制一份,而是只記錄了一份符號表到程序中。
優點:
生成的可執行程序比較小
多個程序如果使用了相同的庫文件,,實際的庫函數代碼在內存中就會只加載一份
缺點:
運行程序的時候,需要加載庫文件,會耗費時間
多個程序加載時,都會先去掃瞄是否存在該庫。
靜態鏈接:
鏈接的是靜態庫,鏈接的時候,是將庫中具體用到的函數
優點:
運行時不依賴庫文件的存在(具體用到的代碼是存在的)
缺點:
生成的可執行程序比較大,如果多個程序都用到了同一個靜態庫中的代碼,則多個程序運行起來后,內存會存在冗余。
gcc默認鏈接方式:
動態鏈接(在同一個目錄下,有同名的動態庫文件,靜態庫文件lib.so,libc.a,這時候優先鏈接動態庫)
調試器:gdb
作用:
調試程序的運行過程,排查程序運行結果結果不符合預期的原因。
可執行程序分為兩類:
debug程序--調試版:
程序員調試程序運行的過程,調試錯誤
release程序--發布版:
測試人員測試的版本,以及交付的版本
gcc編譯器對程序進行編譯,最終生成的可執行程序,默認是release版本
然而release版程序是無法被調試的(因為程序中沒有調試符號信息,并且代碼有可能進行了優化)。
程序調試操作一:
生成debug版本程序
gcc編譯鏈接的時候
gcc -g 生成debug版本程序
程序調試操作二:
使用gdb加載程序
gdb ./main
程序調試操作三:
各種不同的調試指令
1:開始運行程序:run
2:逐步調試程序:start
3:查看調試行附近代碼:list main.c:[行號]
如until main.c:9
程序調試操作四:
next--逐過程--遇到函數則直接將函數執行完
step--逐語句--遇到函數則進入函數對函數內部進行逐步調試
程序調試操作五:
直接將代碼運行到指定行:until main.c:[行號]
程序調試操作六:
從當前調試位置,開始運行:continue
程序調試操作七:
打斷點--讓程序運行到指定位置停下來等待調試:break main.c:19 break func
程序調試操作八:
查看斷點信息:info break
程序調試操作九:
刪除斷點:delete [斷點編號(info break前方會顯示斷點編號)]
程序調試操作十:
查看調用棧 backtrace
程序運行一旦崩潰,則調用棧的棧頂函數就是當前導致程序崩潰的代碼。
程序調試操作十一:
查看變量內容 print [變量]
程序調試操作十二:
設置變量內容 print [變量]=10
程序調試操作十三:
給變量打斷點 watch
項目的自動化構建工具:make&Makefile
Makefile:
就是一個常規的文本文件,但是搭配了make就不一樣了
Makefile可以記錄項目的構建規則
然后通過make對規則進行解釋執行
make:
就是一個Makefile解釋程序,會對Makefile中記錄的規則按照一定語法規則進行解釋執行,最終完成項目的構建
make的執行,會到執行make指令所在的目錄下查找Makefile文件,找到了就執行,找不到則會報錯。
注意:Makefile文件名是固定的,可以是Makefile或者makefile。其他的都不行
Makefile的編寫規則:
[目標對象]:[依賴對象]
\t指令
make解釋規則:make會在makefile中找到第一個目標對象
1、檢測目標對象文件是否存在
有:則會檢測目標對象文件與依賴對象文件的時間關系,判斷目標是否需要重新生成(在目標文件上次生成后,源碼有沒有修改過)
沒有:則需要生成
2、如果需要生成,則會檢測依賴文件是否存在,是否需要生成因此會到下邊找尋依賴文件的生成規則,先生成依賴文件,最終依賴文件都生成后,再去生成目標文件
3、第一個目標對象文件生成后,則退出。所以要把最后想生成什么放在第一行
make解釋規則:
1、在執行make指令的目錄下,查找Makefile文件進行解釋
2、在Makefile中,找到第一個目標對象
3、根據目標與依賴的時間關系,判斷目標對象是否需要重新生成,不需要則直接退出。
4、判斷依賴對象是否需要生成。如果需要則查找依賴對象的生成規則。進行生成
5、執行指令,完成目標對象的生成后退出。
makefile中的其他簡化操作:
預定義變量:
- $^ 當前編譯規則的所有依賴對象
- $< 當前編譯規則中第一個依賴對象
- $@ 當前編譯規則中的目標對象
wildcard獲取指定目錄下特定規則的文件名
patsubst對字符串進行內容替換,將.c替換為.o
偽對象:
使用PHONY聲明一個對象為偽對象
作用:分離目標對象與實際文件之間的關系
(聲明makefile中的目標對象是一個假的對象,與實際的文件沒有關系。)
這樣的話,目標對象的編譯規則中的指令無論如何都會被執行。
(為了讓一個指令不受外部文件影響,每次都執行。比如有時候.o是最新的,就會導致不會運行make,或者說外面有一個clean的文件,再使用make clean它就不知道執行什么,所以需要這樣一個設置。)
項目版本管理工具:git
項目的版本管理:說白了就是將不同提交版本的代碼給備份起來以備回滾,以及容災。
版本管理的工具種類:svn,git,......
1、克隆遠程倉庫:git clone [地址]
比如gitee的地址在:
點擊http
2、添加修改項:git add --all ./
3、提交版本:git commit -m [本次版本的備注]
4、遠程推送:git push origin master
??提示??:比如今天在a文件內提交了main1到master在b文件內也想提交main2到master,那么應該先進行pull再進行main2的提交。
git教程參考網址:
Wiki - Gitee.com幫助