VIM編輯器與GCC編譯器_第1頁
VIM編輯器與GCC編譯器_第2頁
VIM編輯器與GCC編譯器_第3頁
VIM編輯器與GCC編譯器_第4頁
VIM編輯器與GCC編譯器_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

教學(xué)內(nèi)容Vim編輯器Gcc編譯器與gdb調(diào)試器Makefile的編寫教學(xué)要求掌握vim編輯器的常用命令,能夠熟練使用vim編輯器編寫C語言程序掌握gcc編譯器及gdb調(diào)試器的使用,能夠編寫簡單的makefile文件重點(diǎn):vim的常用命令、makefile的編寫3第二節(jié)Vim編輯器VIM編輯器vi簡介Linux系統(tǒng)的第一個全屏幕編輯器不是一個排版程序,只是一個文本編輯程序沒有菜單、只有相當(dāng)豐富的命令Vi有三種工作模式:命令行模式、文本輸入模式、末行模式Linux下有很多編輯器,最典型的是gedit和vimgedit是界面操作,跟Windows上的編輯器差不多vi則是命令交互的編輯器VIM編輯器任何時候,只要按一下ESC鍵,即可進(jìn)入vi命令行模式在shell環(huán)境下輸入啟動vi命令,進(jìn)入編輯器時,也是該模式注意:此時輸入的字符都被當(dāng)做編輯命令來解釋并且輸入的命令并不在屏幕上顯示出來命令行模式VIM編輯器命令行模式下輸入如下命令可以進(jìn)入文本輸入模式插入命令i、I附加命令a、A打開命令o、O修改命令c(cw、cc、c$)取代命令r、R此時用戶輸入的任何字符都被vi當(dāng)做文本內(nèi)容保存起來文本輸入模式VIM編輯器在命令行模式下,用戶按“:”鍵可進(jìn)入末行模式此時vi會在現(xiàn)實(shí)窗口的最后一行顯示一個“:”作為提示符,等待輸入命令大部分管理命令就是在這里輸入的末行命令執(zhí)行完后,vi自動回到命令模式末行模式三種模式切換方法如圖:VIM編輯器vi編輯器啟動使用vi進(jìn)行編輯第一步是進(jìn)入編輯界面,一般方法為:$vifilename請嘗試創(chuàng)建新文件并編輯一段簡單的C程序VIM編輯器顯示vi中的行號當(dāng)編輯的文件較大時,人工確認(rèn)行號不方便需通過vi的命令確認(rèn)行號,在末行模式中輸入:setnu同樣,如果想取消顯示行號,則在末行模式中輸入:setnumber或:setnonu:setnonumber或VIM編輯器光標(biāo)移動操作在vi操作中,不建議使用上下左右四個箭頭移動光標(biāo),而是:h左移j下移k上移l右移這幾個字符跟數(shù)字鍵組合,可以移動多個位置,比如3j光標(biāo)下移3行5h光標(biāo)左移3格H移至屏幕上端L移至屏幕下端M移至屏幕中央gg

到第一行G到最后一行nG

到第n行:n到第n行VIM編輯器移動光標(biāo)還有如下幾個常用命令^或數(shù)字0:光標(biāo)移動到行首$:光標(biāo)移動到行尾w:光標(biāo)跳轉(zhuǎn)到下一個字首,按標(biāo)點(diǎn)或單詞分割W:光標(biāo)跳轉(zhuǎn)到下一個字首,長跳,比如end-of-line是一個字e:光標(biāo)跳轉(zhuǎn)到下一個字尾E:光標(biāo)跳轉(zhuǎn)到下一個字尾,長跳b:光標(biāo)跳轉(zhuǎn)到上一個字,按標(biāo)點(diǎn)或單詞分割B:光標(biāo)跳轉(zhuǎn)到上一個字,長跳VIM編輯器屏幕命令屏幕命令是以屏幕為單位去移動光標(biāo),常用于文件的滾屏和分頁Ctrl+U:將屏幕向前(文件頭方向)翻滾半屏Ctrl+D:將屏幕向后(文件尾方向)翻滾半屏Ctrl+F:將屏幕向后(文件尾方向)翻滾一屏Ctrl+B:將屏幕向前(文件頭方向)翻滾一屏VIM編輯器文本插入命令i:插入文本從光標(biāo)所在位置前開始I:將光標(biāo)移動到當(dāng)前行的行首,然后在其前插入文本文本附加命令a:在光標(biāo)當(dāng)前位置之后追加新文本A:將光標(biāo)移動到所在行的行尾,從那里開始插入新文本文本修改命令o:在光標(biāo)的下面新開一行,并定位到該行的行首,等待輸入O:在光標(biāo)的上面插入一行,并定位到該行的行首,等待輸入VIM編輯器文本修改命令——刪除刪除單個字符x:刪除光標(biāo)處的字符nx:刪除光標(biāo)所在位置開始向右的n個字符(n是具體的數(shù)字)X:刪除光標(biāo)前面的那個字符nX:刪除光標(biāo)前面向左的n個字符(n是具體的數(shù)字)VIM編輯器刪除多個字符dd:刪除光標(biāo)所在當(dāng)前行D或d$:刪除從光標(biāo)所在處開始到行尾的內(nèi)容d^:刪除從光標(biāo)前一個字符開始到行首的內(nèi)容dw:刪除一個單詞dG:刪除光標(biāo)所在行到末尾所有內(nèi)容:n1,n2d刪除n1到n2行VIM編輯器復(fù)制和剪切命令yy、Y復(fù)制當(dāng)前行nyy、nY

復(fù)制當(dāng)前行以下n行dd

剪切當(dāng)前行ndd

剪切當(dāng)前行以下n行p、P粘貼在光標(biāo)所在行下或行上替換和重復(fù)命令r取代光標(biāo)所在處字符R從光標(biāo)所在處開始替換字符,直到按ESC結(jié)束.重復(fù)上一次命令操作VIM編輯器搜索和替換/string搜索指定字符串string:setic

搜索時忽略大小寫;:setnoic區(qū)分大小寫n下一個搜索到的位置;N上一個搜索到的位置:%s/old/new/g

全文替換,將old替換為new,g不需確認(rèn):n1,n2s/old/new/c指定行替換,c需要確認(rèn)VIM編輯器文本修改命令——取消取消上一個命令,也稱復(fù)原命令可以取消前一次的誤操作或不合適的操作對文件的影響u:取消剛才的操作,可取消多次,直到最初狀態(tài)U:取消剛才的操作,只取消前一步操作文本修改命令——恢復(fù)恢復(fù)剛剛?cè)∠拿羁梢园褎偼ㄟ^u命令取消的操作,重新輸入Ctrl+r:恢復(fù)剛才取消的內(nèi)容VIM編輯器退出vi編輯完文件后,準(zhǔn)備退出vi返回shell時,可以在末行模式下,使用如下方法::wnewfile

保存文件為newfile,但并不退出:q退出vi。如果未保存,vi將提示不能退出:wq

newfile

保存并退出:q!強(qiáng)制退出,不保存:x如果修改過,則保存退出;如果未修改過,則直接退出ZZ快捷鍵,保存修改并退出VIM編輯器設(shè)置vi可以通過~/.vimrc文件對vi進(jìn)行默認(rèn)的設(shè)置也可在末行模式中設(shè)置setnu:顯示行號syntaxon:語法高亮(編程時適用)setundolevels=200:undo最大次數(shù)setignorecase:忽略大小寫setautoindent:自動縮進(jìn)(編程時適用)settabstop=4:設(shè)置tab鍵的寬度VIM編輯器多窗口、多文件命令模式下輸入:efile可以再打開一個文件,并且此時vim里會顯示出file文件的內(nèi)容。同時顯示多個文件::sp

//水平切分窗口:vsplit

//垂直切分窗口文件間切換Ctrl+6

//兩文件間的切換窗口間切換的方法Ctrl+w+方向鍵——切換到前/下/上/后一個窗格Ctrl+w+h/j/k/l——同上Ctrl+ww——依次向后切換到下一個窗格中GCC編譯器介紹gccgcc是gnu推出的功能強(qiáng)大、性能優(yōu)越的多平臺編譯器可以在多種平臺上編譯出可執(zhí)行程序的編譯器集合這里以C語言為標(biāo)準(zhǔn)來介紹gccgcc的編譯流程分為4個步驟,如下GCC編譯器該階段,編譯器會將代碼中的stdio.h編譯出來用戶可以使用gcc的選項(xiàng)“-E”進(jìn)行查看預(yù)編譯步驟$gcc-Ehello.c-ohello.i留意生成的hello.i文件預(yù)編譯的過程,其實(shí)是把stdio.h的內(nèi)容插入hello.i文件中GCC編譯器該階段,編譯器會將C代碼轉(zhuǎn)化為匯編代碼使用gcc的-S選項(xiàng)進(jìn)行查看編譯步驟$gcc-Shello.i-ohello.s留意生成的hello.s文件GCC編譯器該階段,編譯器會將匯編代碼轉(zhuǎn)化成目標(biāo)文件使用gcc的-c選項(xiàng)進(jìn)行匯編步驟$gcc-chello.s-ohello.o鏈接步驟$gcc

hello.o-ohello該階段,編譯器會將目標(biāo)文件和函數(shù)庫進(jìn)行鏈接最終生成可執(zhí)行的二進(jìn)制文件執(zhí)行步驟$chmod755hello$./helloGCC編譯器gcc基本用法和常用選項(xiàng)gcc命令的基本用法如下:$gcc[options][filename]前面介紹的4個步驟,我們可以一次全部執(zhí)行,如下:$gcc

hello.c-ohello當(dāng)沒有指定-o選項(xiàng)時,默認(rèn)生成的可執(zhí)行文件為a.out$gcc

hello.c$./a.outGCC編譯器gcc命令的的常用參數(shù)如下:-c:只激活預(yù)處理、編譯、匯編,只編譯成obj文件,不鏈接-S:只激活預(yù)處理、編譯,把文件編譯成匯編代碼-E:只激活預(yù)處理,不生成文件,不編譯-o:指定目標(biāo)名稱,當(dāng)不指定時則默認(rèn)為a.out-ifile:包含某個代碼,功能相當(dāng)于在代碼中使用#include-Idir:首先在指定目錄查找#include指定的文件-llibrary:指定編譯時使用的庫-Ldir:指定編譯時搜索庫的路徑-O0、-O1、-O2、-O3:編譯器的優(yōu)化選項(xiàng)的4個級:0沒有優(yōu)化、1是默認(rèn)、3是最高-g:指定編譯器在編譯時產(chǎn)生調(diào)試信息(參考gdb一節(jié))-Wall:顯示附加的警告消息28第二節(jié)gdb調(diào)試器GDB調(diào)試器gdb簡介gdb能在程序運(yùn)行時,觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存堆棧情況gdb主要功能如下:監(jiān)視程序中變量的值設(shè)置程序斷點(diǎn)逐行執(zhí)行代碼GDB調(diào)試器gdb調(diào)試時常用的命令如下:命令說明file裝入想要調(diào)試的可執(zhí)行文件kill終止正在調(diào)試的程序list列出產(chǎn)生執(zhí)行文件的源碼的一部分next執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部step執(zhí)行一行源代碼并且進(jìn)入函數(shù)內(nèi)部run執(zhí)行當(dāng)前被調(diào)試的程序quit終止gdbwatch監(jiān)視一個變量的值而不管它何時被改變break在代碼中設(shè)置斷點(diǎn),使程序執(zhí)行到這里時被掛起make不退出gdb情況下,可以重新產(chǎn)生可執(zhí)行文件shell不離開gdb,執(zhí)行UNIXshell命令觀察老師演示的gdb實(shí)驗(yàn)31第三節(jié)MakefileMakefileMakefile文件利用make工具,可以將大型項(xiàng)目分解成多個更容易管理的模塊方便管理人員梳理各個源文件之間復(fù)雜的關(guān)系一個make命令,可以編譯不同目錄下的多個源文件make工具最主要最基本的功能是通過makefile文件來描述源程序之間的相互關(guān)系,并自動維護(hù)編譯工作如果一個目錄下沒有Makefile文件,輸入make命令,系統(tǒng)報錯MakefileLinux系統(tǒng)中,習(xí)慣使用Makefile文件名編譯是輸入make命令即可$make–fMakefile.debug如果要使用其他文件(一般不建議),則需要通過-f選項(xiàng)指定$makeMakefile假設(shè)一個工程中包含filea.c、fileb.c、test.c三個文件如果用gcc編譯這個工程,需要$make現(xiàn)在我們使用Makefile對這個工程進(jìn)行管理,則建立Makefile文件$gcc-cfilea.c–ofilea.o$gcc-cfileb.c–ofileb.o$gcc-ctest.c–otest.o$gcc

filea.o

fileb.o

test.o–oprog然后輸入命令Makefile將自動幫我們進(jìn)行編譯Makefile現(xiàn)在我們簡單分析一下這個Makefile文件指定prog程序由3個目標(biāo)文件filea.o、fileb.o、test.o鏈接生成prog:filea.o

fileb.o

test.o

gcc

filea.o

fileb.o

test.o-oprogfilea.o:filea.c

gcc-cfilea.c指定目標(biāo)文件filea.o由filea.c編譯生成注意:如果filea.c文件在編譯之后被修改則make可以自動重新編譯filea.o,最后再生成新的progMakefileMakefile作為一種描述文檔一般需要包含如下內(nèi)容宏定義源文件之間的相互依賴關(guān)系可執(zhí)行的命令$(CFLAGS)Makefile使用簡單的宏指代源文件或編譯信息,Linux中稱為宏變量在引用宏時,需要在變

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論