目錄
一、vim
? ? ? ?1.vim的模式
? ? ? ?2.vim的命令集
? ? ? ?(1):命令模式? ? ? ?(2):底行模式
? ? ? ? 3.vim配置
二、gcc
? ? 1.gcc格式及選項
? ? 2.工作布置
三、自動化構建工具makefile
? ? ? ? 1.基本使用方法
? ? ? ? 2.配置文件解析
? ? ? ? 3.拓展
在linux操作系統的常用工具中,常用vim來進行程序的編寫;然后用gcc來生成執行文件,最終運行程序。本文來向大家介紹下vim和gcc,以及最后介紹自動化構建工具Makefile,這三個工具的使用方法。
一、vim
1.vim的模式
在vim編譯器中有很多不同的模式讓我們進行操作,最為常用的模式有三種,分別是分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能區分如下:
正常/普通/命令模式(Normal mode):控制光標移動,通過輸入的對應命令來實現增、刪、改。同時也可以在此模式下進入插入模式(Insert mode)或者底行模式(last line mode)。
插入模式(Insert mode):在此模式下可以可以正常編寫代碼入,按「ESC」鍵可回到命令行模式。該模式是我們后面用的最頻繁的編輯模式。
末行模式(last line mode):文件保存或退出,也可以進行文件替換,找字符串,列出行號等操作。 在命令模式下,shift+: 即可進入該模式。
那么,在三個模式之間該如何切換呢?
將命令模式轉換為插入模式:按鍵盤上的a,i,o間即可
將插入模式轉換為命令模式:按鍵盤上的Esc鍵即可
將命令模式轉換為末行模式:按住鍵盤上的shift鍵再加上'+'號
將末行模式轉換為命令模式:按鍵盤上的Esc鍵即可
注:其實任何模式要最終回到命令模式都只要無腦Esc即可。
2.vim命令集
(1)、命令模式:
1.進入插入模式
- 按「i」切換進入插入模式「insert mode」,按“i”進入插入模式后是從光標當前位置開始輸入文件;
- 按「a」進入插入模式后,是從目前光標所在位置的下一個位置開始輸入文字;
- 按「o」進入插入模式后,是插入新的一行,從行首開始輸入文字
2.光標移動
- 按[gg]:光標定位到文件的最開始位置
- 按[shift+g]:光標定位到文件的最后一行
- 按[n+shift+g]:光標定位到文件第n行
- 按[shift+$]:光標定位到當前行的末尾
- 按[shift+^]:光標定位到當前行的開始
- 按[w]:光標跳到下一個的開頭
- 按[b]:光標跳到前一個的開頭
- 按[h]、[j]、[k]、[l]:光標左移、下移、上移、右移
3.復制、剪切(刪除)行
- 「yy」:復制光標所在行到緩沖區
- 「nyy」:例如,「6yy」表示拷貝從光標所在的該行“往下數”6行文字
- 「dd」:剪切光標所在的行。如果沒有咱貼操作,即可視為刪除行
- 「ndd」:剪切或刪除從光標所在行開始的n行
- 「p」:將緩沖區內的字符貼到光標所在位置
4.刪除文字
- 「x」:每按一次,刪除光標所在位置的一個字符
- 「#x」:例如,「6x」表示刪除光標所在位置的“后面(包含自己在內)”6個字符
- 「X」:大寫的X,每按一次,刪除光標所在位置的“前面”一個字符
- 「#X」:例如,「20X」表示刪除光標所在位置的“前面”20個字符
5.替換
- 「r」:替換光標所在處的字符
- 「R」:替換光標所到之處的字符,直到按下「ESC」鍵為止
- 撤銷上一次的操作
- 「u」:如果您誤執行一個命令,可以馬上按下「u」,回到上一個操作。按多次“u”可以執行多次回復
- 「ctrl + r」: 撤銷的恢復
(2)、底行模式:
1.列出行號
- 「set nu」: 輸入「set nu」后,會在文件中的每一行前面列出行號
- 「set nonu」:去掉行號
2.查找字符
- 「/關鍵字」: 先按「/」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往后尋找到您要的關鍵字為止
3.跳到文件中的某一行
- 「#」:「#」號表示一個數字,在冒號后輸入一個數字,再按回車鍵就會跳到該行了,如輸入數字15,再回車,就會跳到文章的第15行?
4.文件多開
- [vs 文件名]:先按 [vs],輸入文件名字,就可以實現多個文件同時用vim打開。如果vs的文件不存在,會新建一個文件并且打開。
- [ctrl ww];光標在窗口之間切換
5.保存文件
- 「w」: 在冒號輸入字母「w」就可以將文件保存起來
6.離開vim
- [q」:按「q」就是退出,如果無法離開vim,可以在「q」后跟一個「!」強制離開vim。
- 「wq」:一般建議離開時,搭配「w」一起使用,這樣在退出的時候還可以保存文件。
3.vim配置
- 通過vim的配置文件vimrc可以對vim進行配置,每個用戶都擁有自己的配置文件。同一臺機器上,不同用戶的配置文件相互獨立,互不干擾。例如:root的的配置文件在"/root"目錄下,名為“.vimrc”。
- 通常情況下不推薦直接對root的文件進行配置,各各用戶配置自己的vim即可。執行 cd ~來到自己的家目錄下,執行 vim .vimrc打開“.vimrc”文件,直接進行配置即可。(具體配置指令上網直接復制即可)
二、gcc/g++
gcc是在Linux操作系統中用來編譯C語言代碼,生成可執行程序的一個工具。同理,C++則是用來編譯C++的工具。
1.gcc格式及選項
格式:gcc [選項] 要編譯的文件 [選項] [目標文件]
1. -E 只激活預處理,這個不生成文件,你需要把它重定向到一個輸出文件里面,即完成預處理
2. -S 編譯到匯編語言不進行匯編和鏈接,即完成編譯
3. -c 編譯到目標代碼,即完成匯編
4. -o 文件輸出到文件,即給gcc操作完成后的文件取名
5. -static 此選項對生成的文件采用靜態鏈接
2.工作步驟
- 預處理
預處理會對代碼進行如下幾項操作,最終生成后綴為".i"的文件
- 頭文件展開
- 去注釋
- 宏替換
- 條件編譯
代碼示例:?
gcc –E hello.c –o hello.i#選項“-E”,該選項的作用是讓 gcc 在預處理結束后停止編譯過程#選項“-o”是指目標文件,“.i”文件為已經過預處理的C原始程序
?2.編譯
對后綴為".i"的文件編譯,編譯器會首先檢查代碼是否規范,是否存在語法錯誤。確認無誤后,把代碼翻譯為匯編語言,生成文件后綴為".s"。
代碼示例:?
gcc -S hello.i -o hello.s
#選項“-S”,該選項的作用是讓gcc對文件完成編譯后就停止,生成匯編代碼而不進行匯編操作
3.匯編
對后綴為".s"的文件(匯編代碼)進行匯編,生成機器能識別的語言,也就是目標文件。
代碼示例:
gcc -c hello.s -o hello.o
#類似上"-c"表示執行完成匯編就停止
4.鏈接
目標文件與函數庫完成鏈接,就會生成可執行程序,我們寫的代碼就能跑起來了。
代碼示例:
gcc hello.o -o hello
接下來我們來詳細了解一下何為函數庫:
我們的C程序中,并沒有定義“printf”的函數實現,且在預編譯中包含的“stdio.h”中也只有該函數的聲明,而沒有定義函數的實現,那么,是在哪里實“printf”函數的呢?
最后的答案是:系統把這些函數實現都被做到名為 libc.so.6 的庫文件中去了,在沒有特別指定時,gcc 會到系統默認的搜索路徑“/usr/lib”下進行查找,也就是鏈接到 libc.so.6 庫函數中去,這樣就能實現函數“printf”了,而這也就是鏈接的作用。
函數庫一般分為靜態庫和動態庫兩種:
靜態庫:在鏈接時會把函數庫中的代碼全都復制到可執行文件中,因此經過靜態鏈接生成的可執行文件較大。但是一旦鏈接完成就不再依賴函數庫,即使庫被干掉,可執行文件依然可以運行。
動態庫:與靜態鏈接相反,動態鏈接鏈接動態庫時,只要在可執行文件中留下鏈接文件即可。在運行時用過鏈接文件來加載動態庫,讓可執行文件較小。但是可執行文件依賴函數庫。
gcc默認使用動態庫,如果要其使用靜態庫,加上選項"-static"即可。可以通過"file"指令來查看鏈接方式。
三、自動化構建工具makefile
1.基本使用方法
makefile是一個幫我們更加快捷進行文件編譯的工具,如下是正常的使用gcc進行編譯:
gcc -o test.c test #編譯
./test #運行
rm -f test #刪除
較為繁瑣。為了簡化操作,我們在目錄下創建一個Makefile文件進行配置,配置如下:
test:test.cgcc -o test test.c
.PHONY:clean
clean:rm -f test
2.配置文件解析:
1.指令格式:make
代碼示例:
make
在我們單光輸入“make”的時候,文件會尋找Makefile文件中的第一個依賴關系,在上圖中,也就是確定”test”要依賴“test.c”來實現。確定依賴關系之后,就會根據依賴方法來執行編譯的命令,也就是圖中的gcc的命令。
2.指令格式:make + 目標文件
代碼示例:
make clean
在make之后跟上一個目標文件之后,系統會在Makefile文件中尋找匹配的依賴關系,上圖中很明顯會找到“clean”這個依賴關系。最后就會執行clean的依賴方法,完成刪除操作。
3.偽目標
目標文件的依賴關系如果最近被執行過一次,那該目標文件就處于最新狀態,make下次尋找到之后發現它是最新狀態,就不會再次執行依賴方法。而被偽目標所修飾的目標文件,不論是否是最新的,執行他的依賴方法
?
3.拓展
- 依賴方法便捷表示
下文代碼的第二和第三行所實現是效果是相同的。?可以用“$@”來表示依賴關系中“:”左側的內容,而用“$^ ”來表示“:”右側的內容。
1 test:test.c2 gcc -o $@ $^ 3 gcc -o test test.c
2.取消回顯
在使用make相關指令的時候會進行命令的回顯,如果想要取消回顯,只需要在依賴方法前面加上"@“.?