




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章GNU開發(fā)工具的使用方法
GNU(上)3.1vi使用說明
3.1.1vi簡(jiǎn)介 vi是Unix世界里極為普遍的全屏幕文本編輯器,幾乎可以說任何一臺(tái)Unix機(jī)器都會(huì)提供這套軟件。Linux當(dāng)然也有。3.1vi使用說明
3.1.2vi基本命令進(jìn)入與離開vi<文件名稱>;要離開vi可以在指令模式下鍵入:q,:wq指令則是保存后再離開(注意冒號(hào))。輸入模式新增(append)a從光標(biāo)所在位置后面開始新增資料,光標(biāo)后的資料隨新增資料向后移動(dòng)。A從光標(biāo)所在列最后面的地方開始新增資料。3.1vi使用說明
插入(insert)i從光標(biāo)所在位置前面開始插入資料,光標(biāo)后的資料隨新增資料向后移動(dòng)。I從光標(biāo)所在列的第一個(gè)非空白字符前面開始插入資料。開始(open)o在光標(biāo)所在列下新增一列并進(jìn)入輸入模式。O在光標(biāo)所在列上方新增一列并進(jìn)入輸入模式。3.1vi使用說明
(3)基本編輯 配合一般鍵盤上的功能鍵,像是方向鍵、[Insert]、[Delete]等等,現(xiàn)在你應(yīng)該已經(jīng)可以利用vi來處理文字資料了。當(dāng)然vi還提供其他許許多多功能讓文字的處理更加方便,有興趣的讀者請(qǐng)繼續(xù)。(4)刪除與修改x刪除光標(biāo)所在字符。dd刪除光標(biāo)所在的列。r修改光標(biāo)所在字符,r后接著要修正的字符。R進(jìn)入取代狀態(tài),新增資料會(huì)覆蓋原先資料,直到按[ESC]回到指令模式下為止。3.1vi使用說明
s刪除光標(biāo)所在字符,并進(jìn)入輸入模式。S刪除光標(biāo)所在的列,并進(jìn)入輸入模式。在指令模式下移動(dòng)光標(biāo)的基本指令是h,j,k,l。有個(gè)很好用的指令u可以恢復(fù)被刪除的資料,而U指令則可以恢復(fù)光標(biāo)所在列的所有改變。3.2編寫Makefile
無論是在Linux還是在Unix環(huán)境中,make都是一個(gè)非常重要的編譯命令。不管是自己進(jìn)行項(xiàng)目開發(fā)還是安裝應(yīng)用軟件,我們都經(jīng)常要用到make或makeinstall。利用make工具,我們可以將大型的開發(fā)項(xiàng)目分解成為多個(gè)更易于管理的模塊,對(duì)于一個(gè)包括幾百個(gè)源文件的應(yīng)用程序,使用make和makefile工具就可以簡(jiǎn)潔明快地理順各個(gè)源文件之間紛繁復(fù)雜的相互關(guān)系。而且如此多的源文件,如果每次都要鍵入gcc命令進(jìn)行編譯的話,那對(duì)程序員來說簡(jiǎn)直就是一場(chǎng)災(zāi)難。而make工具則可自動(dòng)完成編譯工作,并且可以只對(duì)程序員在上次編譯后修改過的部分進(jìn)行編譯。3.2編寫Makefile
3.2.1什么是MakefileMake—這個(gè)工具最主要也是最基本的功能就是通過makefile文件來描述源程序之間的相互關(guān)系并自動(dòng)維護(hù)編譯工作。
makefile文件--需要按照某種語法進(jìn)行編寫,文件中需要說明如何編譯各個(gè)源文件并連接生成可執(zhí)行文件,并要求定義源文件之間的依賴關(guān)系。由Make工具來解釋執(zhí)行。3.2編寫Makefile
在UNIX系統(tǒng)中,習(xí)慣使用Makefile作為makfile文件。如果要使用其他文件作為makefile,則可利用類似下面的make命令選項(xiàng)指定makefile文件: make-f xxx
默認(rèn)時(shí),make將依次根據(jù)GNUmakefile,makefile,Makefile來查找。3.2編寫Makefile
一個(gè)實(shí)例以及對(duì)它的解釋:
edit:main.okbd.ocommand.odisplay.o\ insert.osearch.ofiles.outils.o cc-oeditmain.okbd.ocommand.odisplay.o\ insert.osearch.ofiles.outils.o main.o:main.cdefs.h
cc-cmain.c kbd.o:kbd.cdefs.hcommand.h
cc-ckbd.c command.o:command.cdefs.hcommand.h
cc-ccommand.c
3.2編寫Makefile
display.o:display.cdefs.hbuffer.h
cc-cdisplay.c insert.o:insert.cdefs.hbuffer.h
cc-cinsert.c search.o:search.cdefs.hbuffer.h
cc-csearch.c files.o:files.cdefs.hbuffer.hcommand.h
cc-cfiles.c utils.o:utils.cdefs.hcc-cutils.c clean:
rmeditmain.okbd.ocommand.odisplay.o\
insert.osearch.ofiles.outils.o3.2編寫Makefile
以上實(shí)例的注釋: 反斜杠(\)是換行符的意思。 在這個(gè)makefile中,目標(biāo)文件(target)包含:執(zhí)行文件edit和中間目標(biāo)文件(*.o),依賴文件(prerequisites)就是冒號(hào)后面的那些.c文件和.h文件。每一個(gè).o文件都有一組依賴文件,而這些.o文件又是執(zhí)行文件edit的依賴文件。依賴關(guān)系的實(shí)質(zhì)上就是說明了目標(biāo)文件是由哪些文件生成的,換言之,目標(biāo)文件是哪些文件更新的。3.2編寫Makefile
3. 后續(xù)的那一行定義了如何生成目標(biāo)文件的操作系統(tǒng)命令,一定要以一個(gè)Tab鍵作為開頭。4. make會(huì)比較targets文件和prerequisites文件的修改日期,如果prerequisites文件的日期要比targets文件的日期要新,或者target不存在的話,那么,make就會(huì)執(zhí)行后續(xù)定義的命令。3.2編寫Makefile
5. 這里要說明一點(diǎn)的是,clean不是一個(gè)文件,它只不過是一個(gè)動(dòng)作名字,有點(diǎn)像C語言中的label一樣,其冒號(hào)后什么也沒有,那么,make就不會(huì)自動(dòng)去找文件的依賴性,也就不會(huì)自動(dòng)執(zhí)行其后所定義的命令。要執(zhí)行其后的命令,就要在make命令后明顯得指出這個(gè)label的名字。3.2編寫Makefile
6. 從上面的例子可以看到,Makefile文件作為一種描述文檔一般需要包含以下內(nèi)容:◆宏定義◆源文件之間的相互依賴關(guān)系◆可執(zhí)行的命令7. Makefile中允許使用簡(jiǎn)單的宏指代源文件及其相關(guān)編譯信息,在Linux中也稱宏為變量。在引用宏時(shí)只需在變量前加$符號(hào),但值得注意的是,如果變量名的長(zhǎng)度超過一個(gè)字符,在引用時(shí)就必須加圓括號(hào)()。3.2編寫Makefile
3.2.2Make命令在make命令后不僅可以出現(xiàn)宏定義,還可以跟其他命令行參數(shù),這些參數(shù)指定了需要編譯的目標(biāo)文件。其標(biāo)準(zhǔn)形式為: target1[target2…]:[:][dependent1…][mands][#…] [(tab)commands][#…]方括號(hào)中間的部分表示可選項(xiàng)。Targets和dependents當(dāng)中可以包含字符、數(shù)字、句點(diǎn)和“/”符號(hào)。除了引用,commands中不能含有“#”,也不允許換行。3.2編寫Makefile
Make命本身可帶有四種參數(shù):標(biāo)志、宏定義、描述文件名和目標(biāo)文件名。其標(biāo)準(zhǔn)形式為: Make[flags][macrodefinitions][targets]Unix系統(tǒng)下標(biāo)志位flags選項(xiàng)及其含義為:
-ffile指定file文件為描述文件,如果file參數(shù)為"-"符,那么描述文件指向標(biāo)準(zhǔn)輸入。如果沒有"-f"參數(shù),則系統(tǒng)將默認(rèn)當(dāng)前目錄下名為makefile或者名為Makefile的文件為描述文件。在Linux中,GNUmake工具在當(dāng)前工作目錄中按照GNUmakefile、makefile、Makefile的順序搜索makefile文件。3.2編寫Makefile
-i忽略命令執(zhí)行返回的出錯(cuò)信息。-s沉默模式,在執(zhí)行之前不輸出相應(yīng)的命令行信息。-r禁止使用build-in規(guī)則。-n非執(zhí)行模式,輸出所有執(zhí)行命令,但并不執(zhí)行。-t更新目標(biāo)文件。-q
make操作將根據(jù)目標(biāo)文件是否已經(jīng)更新返回"0"或非"0"的狀態(tài)信息。3.2編寫Makefile
-p輸出所有宏定義和目標(biāo)文件描述。-d
Debug模式,輸出有關(guān)文件和檢測(cè)時(shí)間的詳細(xì)信息。Linux下make標(biāo)志位的常用選項(xiàng)與Unix系統(tǒng)中稍有不同,下面我們只列出了不同部分:-cdir在讀取makefile之前改變到指定的目錄dir。-Idir當(dāng)包含其他makefile文件時(shí),利用該選項(xiàng)指定搜索目錄。-h
help文擋,顯示所有的make選項(xiàng)。-w在處理makefile之前和之后,都顯示工作目錄。3.2編寫Makefile
通常,makefile中還定義有clean目標(biāo),可用來清除編譯過程中的中間文件,例如: clean: rm-f*.o 運(yùn)行makeclean時(shí),將執(zhí)行rm-f*.o命令,最終刪除所有編譯過程中產(chǎn)生的所有中間文件。3.2編寫Makefile
3.2.3隱含規(guī)則在make工具中包含有一些內(nèi)置的或隱含的規(guī)則,這些規(guī)則定義了如何從不同的依賴文件建立特定類型的目標(biāo)。Unix系統(tǒng)通常支持一種基于文件擴(kuò)展名即文件名后綴的隱含規(guī)則。這種后綴規(guī)則定義了如何將一個(gè)具有特定文件名后綴的文件(例如.c文件),轉(zhuǎn)換成為具有另一種文件名后綴的文件(例如.o文件): .c:.o $(CC)$(CFLAGS)$(CPPFLAGS)-c-o$@$<3.2編寫Makefile
系統(tǒng)中默認(rèn)的常用文件擴(kuò)展名及其含義為: .o目標(biāo)文件 .c
C源文件 .f
FORTRAN源文件 .s匯編源文件3.3使用GCC
GCC編譯器完成從C、C++、objective-C等源文件向運(yùn)行在特定CPU硬件上的目標(biāo)代碼的轉(zhuǎn)換(這是任何一個(gè)編譯器需要完成的任務(wù))。GCC能夠處理的源文件分為C、C++、Objective-C、匯編語言等。3.3使用GCC
3.3.1GCC的用法 GCC的使用語法: gcc[option|filename]... g++[option|filename]... 其中option
為gcc使用時(shí)的選項(xiàng),而filename為欲以gcc處理的文件。 說明: 這兩個(gè)C與C++的compiler已將產(chǎn)生新程序的相關(guān)程序整合起來。產(chǎn)生一個(gè)新的程序需要經(jīng)過四個(gè)階段:預(yù)處理、編譯、匯編,連結(jié),
而這兩個(gè)編譯器都能將輸入的文件做不同階段的處理。3.3使用GCC
gcc
預(yù)設(shè)經(jīng)由預(yù)處理過(擴(kuò)展名為.i)的文件為C語言,并于程序連結(jié)階段以C的連結(jié)方式處理。g++
預(yù)設(shè)經(jīng)由預(yù)處理過(擴(kuò)展名為.i)的文件為C++語言,并于程序連結(jié)階段以C++的連結(jié)方式處理。3.3使用GCC
原始程序碼的擴(kuò)展名指出編寫程序所用的語言,以及相對(duì)應(yīng)的處理方法:.c
C原始程序
;
預(yù)處理、編譯、匯編.C
C++原始程序
;
預(yù)處理、編譯、匯編.cc
C++原始程序
;
預(yù)處理、編譯、匯編.cxx
C++原始程序
;
預(yù)處理、編譯、匯編.m
Objective-C原始程序
;
預(yù)處理、編譯、匯編3.3使用GCC
.i
已經(jīng)過預(yù)處理之C原始程序
;
編譯、匯編.ii
已經(jīng)過預(yù)處理之C++原始程序
;
編譯、匯編.s
組合語言原始程序
;
匯編.S
組
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度工傷人員傷殘?jiān)u定及賠償協(xié)議
- 2025年度集體合同協(xié)商中的勞動(dòng)爭(zhēng)議處理
- 2025年度幼兒園保安聘用合同標(biāo)準(zhǔn)范本
- 二零二五年度專業(yè)護(hù)工針對(duì)心血管疾病病人護(hù)理合同
- 2025年度中小企業(yè)發(fā)展基金借款連帶擔(dān)保人合同
- 2025年度單位食堂承包及員工滿意度提升協(xié)議
- 2025年度知識(shí)產(chǎn)權(quán)股份代持許可使用協(xié)議
- 2025年度國(guó)際文化交流項(xiàng)目合作誠(chéng)意金協(xié)議
- 2025年度工程監(jiān)理個(gè)人勞動(dòng)合同(工程質(zhì)量安全管理)
- 2025年度航空航天器復(fù)合材料維修合同
- 湖南科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試參考試題庫(含答案)
- 玻璃分化板制作工藝
- 虹吸現(xiàn)象講解
- 設(shè)備采購(gòu)計(jì)劃書
- 長(zhǎng)興縣合溪水庫清淤工程(一期)環(huán)境影響報(bào)告
- 粒籽源永久性植入治療放射防護(hù)要求
- 新聞選題申報(bào)單
- 醫(yī)學(xué)倫理審查申請(qǐng)表
- 《計(jì)算機(jī)安全基礎(chǔ)》課件
- 養(yǎng)老院行業(yè)現(xiàn)狀分析-2023年中國(guó)養(yǎng)老院行業(yè)市場(chǎng)發(fā)展前景研究報(bào)告-智研咨詢
- 住房公積金貸款申請(qǐng)書
評(píng)論
0/150
提交評(píng)論