




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
LinuxC編程基礎(chǔ)1Ountline1.編輯器(Vi)的基本操作2.GCC的使用3.Gdb的使用4.Makefile介紹5.使用GNUAutotools來生成Makefile文件、congfigure文件21Vi編輯器1.1ViVi是Linux系統(tǒng)上的第一個(gè)全屏幕交互式編輯程序。我們目前一般使用的是Vim(ViImproved)。31Vi編輯器(cont.)一、Vi工作模式
Vi有3種工作模式,分別為命令行模式、插入模式及底行模式(1)命令行模式 用戶在用Vi編輯文件時(shí),最初進(jìn)入的模式為命令行模式。在該模式中,可以通過上下移動(dòng)光標(biāo)進(jìn)行“刪除”、“復(fù)制”、“粘貼”等操作,但無(wú)法編輯文字。41Vi編輯器(cont.)(2)插入模式在命令行模式下,按“I”或者“Insert”鍵都可以進(jìn)入插入模式。在該模式下,用戶可以進(jìn)行文字的編輯輸入。按“Esc”鍵可從插入模式切換到命令行模式。(3)底行模式在底行模式下,光標(biāo)位于屏幕的底行。此時(shí)用戶可以進(jìn)行文件保存或退出操作,也可以設(shè)置編輯環(huán)境,如查找字符串、列出行號(hào)等。51Vi編輯器(cont.)二、vi的基本操作
1)進(jìn)入vi
在系統(tǒng)提示符號(hào)輸入vi及文件名稱后,就進(jìn)入vi全屏幕編輯畫面:
$vimyfile
不過有一點(diǎn)要特別注意,就是您進(jìn)入vi之后,是處于「命令行模式(commandmode)」,您要切換到「插入模式(Insertmode)」才能夠輸入文字。初次使用vi的人都會(huì)想先用上下左右鍵移動(dòng)光標(biāo),結(jié)果電腦一直嗶嗶叫,把自己氣個(gè)半死,所以進(jìn)入vi后,先不要亂動(dòng),轉(zhuǎn)換到「插入模式(Insertmode)」再說吧!
61Vi編輯器(cont.)2)切換至插入模式(Insertmode)編輯文件在「命令行模式(commandmode)」下按一下字母「i」就可以進(jìn)入「插入模式(Insertmode)」,這時(shí)候你就可以開始輸入文字了。3)Insert的切換您目前處于「插入模式(Insertmode)」,您就只能一直輸入文字,如果您發(fā)現(xiàn)輸錯(cuò)了字!想用光標(biāo)鍵往回移動(dòng),將該字刪除,就要先按一下「ESC」鍵轉(zhuǎn)到「命令行模式(commandmode)」再刪除文字。71Vi編輯器(cont.)4)退出vi及保存文件在「命令行模式(commandmode)」下,按一下「:」冒號(hào)鍵進(jìn)入「Lastlinemode」,例如::wfilename(輸入「wfilename」將文章以指定的文件名filename保存):wq(輸入「wq」,存盤并退出vi):q!(輸入q!,不存盤強(qiáng)制退出vi)81Vi編輯器(cont.)三、Vi各模式的功能鍵(1)命令行模式常用的功能鍵1)切換到插入模式按「i」切換進(jìn)入插入模式「insertmode」,按"i"進(jìn)入插入模式后是從光標(biāo)當(dāng)前位置開始輸入文件;按「a」進(jìn)入插入模式后,是從目前光標(biāo)所在位置的下一個(gè)位置開始輸入文字;按「o」進(jìn)入插入模式后,是插入新的一行,從行首開始輸入文字。2)從插入模式切換為命令行模式按「ESC」鍵。91Vi編輯器(cont.)3)移動(dòng)光標(biāo)
vi可以直接用鍵盤上的光標(biāo)來上下左右移動(dòng),但正規(guī)的vi是用小寫英文字母「h」、「j」、「k」、「l」,分別控制光標(biāo)左、下、上、右移一格。按「ctrl」+「b」:屏幕往"后"移動(dòng)一頁(yè)。按「ctrl」+「f」:屏幕往"前"移動(dòng)一頁(yè)。按「ctrl」+「u」:屏幕往"后"移動(dòng)半頁(yè)。按「ctrl」+「d」:屏幕往"前"移動(dòng)半頁(yè)。按數(shù)字「0」:移到文章的開頭。按「G」:移動(dòng)到文章的最后。按「$」:移動(dòng)到光標(biāo)所在行的"行尾"。按「^」:移動(dòng)到光標(biāo)所在行的"行首"按「w」:光標(biāo)跳到下個(gè)字的開頭按「e」:光標(biāo)跳到下個(gè)字的字尾按「b」:光標(biāo)回到上個(gè)字的開頭按「#l」:光標(biāo)移到該行的第#個(gè)位置,如:5l,56l。101Vi編輯器(cont.)4)刪除文字「x」:每按一次,刪除光標(biāo)所在位置的"后面"一個(gè)字符?!?x」:例如,「6x」表示刪除光標(biāo)所在位置的"后面"6個(gè)字符?!竂」:大寫的X,每按一次,刪除光標(biāo)所在位置的"前面"一個(gè)字符。「#X」:例如,「20X」表示刪除光標(biāo)所在位置的"前面"20個(gè)字符?!竏d」:刪除光標(biāo)所在行?!?dd」:從光標(biāo)所在行開始刪除#行111Vi編輯器(cont.)5)復(fù)制「yw」:將光標(biāo)所在之處到字尾的字符復(fù)制到緩沖區(qū)中?!?yw」:復(fù)制#個(gè)字到緩沖區(qū)「yy」:復(fù)制光標(biāo)所在行到緩沖區(qū)?!?yy」:例如,「6yy」表示拷貝從光標(biāo)所在的該行"往下數(shù)"6行文字?!竝」:將緩沖區(qū)內(nèi)的字符貼到光標(biāo)所在位置。注意:所有與"y"有關(guān)的復(fù)制命令都必須與"p"配合才能完成復(fù)制與粘貼功能。121Vi編輯器(cont.)6)替換「r」:替換光標(biāo)所在處的字符?!窻」:替換光標(biāo)所到之處的字符,直到按下「ESC」鍵為止。7)回復(fù)上一次操作「u」:如果您誤執(zhí)行一個(gè)命令,可以馬上按下「u」,回到上一個(gè)操作。按多次"u"可以執(zhí)行多次回復(fù)。131Vi編輯器(cont.)8)更改「cw」:更改光標(biāo)所在處的字到字尾處「c#w」:例如,「c3w」表示更改3個(gè)字9)跳至指定的行
ctrl」+「g」列出光標(biāo)所在行的行號(hào)。
#G」:例如,「15G」,表示移動(dòng)光標(biāo)至文章的第15行行首。141Vi編輯器(cont.)(2)底行模式下常用的命令在使用「lastlinemode」之前,請(qǐng)記住先按「ESC」鍵確定您已經(jīng)處于「commandmode」下后,再按「:」冒號(hào)即可進(jìn)入「lastlinemode」。
151Vi編輯器(cont.)1)列出行號(hào)「setnu」:輸入「setnu」后,會(huì)在文件中的每一行前面列出行號(hào)。2)跳到文件中的某一行「#」:「#」號(hào)表示一個(gè)數(shù)字,在冒號(hào)后輸入一個(gè)數(shù)字,再按回車鍵就會(huì)跳到該行了,如輸入數(shù)字15,再回車,就會(huì)跳到文章的第15行。161Vi編輯器(cont.)3)查找字符「/關(guān)鍵字」:先按「/」鍵,再輸入您想尋找的字符,如果第一次找的關(guān)鍵字不是您想要的,可以一直按「n」會(huì)往后尋找到您要的關(guān)鍵字為止。「?關(guān)鍵字」:先按「?」鍵,再輸入您想尋找的字符,如果第一次找的關(guān)鍵字不是您想要的,可以一直按「n」會(huì)往前尋找到您要的關(guān)鍵字為止。171Vi編輯器(cont.)4)保存文件「w」:在冒號(hào)輸入字母「w」就可以將文件保存起來。5)離開vi「q」:按「q」就是退出,如果無(wú)法離開vi,可以在「q」后跟一個(gè)「!」強(qiáng)制離開vi。「wq」:一般建議離開時(shí),搭配「w」一起使用,這樣在退出的時(shí)候還可以保存文件。182GCC編譯器一、What’sGCCGCCstandsfor“GNUCompilerCollection”.GCCisanintegrateddistributionofcompilersforseveralmajorprogramminglanguages.TheselanguagescurrentlyincludeC,C++,Objective-C,Objective-C++,Java,Fortran,andAda.192GCC編譯器(cont.)TheabbreviationGCChasmultiplemeaningsincommonuse.Thecurrentofficialmeaningis“GNUCompilerCollection”,whichrefersgenericallytothecompletesuiteoftools.Thenamehistoricallystoodfor“GNUCCompiler”,andthisusageisstillcommonwhentheemphasisisoncompilingCprograms.202GCC編譯器(cont.)二、GCC編譯流程GCC的編譯流程分為4個(gè)步驟,分別為:(1)預(yù)處理(Pre-Processing); 在該階段,編譯器分析處理源代碼文件中的各種宏指令,如#include,#if等。(2)編譯(Compiling);在該階段,GCC首先要檢查代碼的規(guī)范性、是否有語(yǔ)法錯(cuò)誤等,在檢查無(wú)誤后,GCC把代碼翻譯為匯編語(yǔ)言。212GCC編譯器(cont.)(3)匯編(Assembling);在該階段,編譯器把編譯生成的匯編代碼轉(zhuǎn)成二進(jìn)制目標(biāo)代碼。(4)鏈接(Linking)。在該階段,編譯器把匯編階段生成的二進(jìn)制代碼、程序中用到的庫(kù)文件鏈接起來,生成可執(zhí)行文件。函數(shù)庫(kù)分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)。靜態(tài)庫(kù):在鏈接時(shí),靜態(tài)庫(kù)的文件代碼會(huì)被拷貝到可執(zhí)行文件中。動(dòng)態(tài)庫(kù):鏈接時(shí),動(dòng)態(tài)庫(kù)的代碼不會(huì)被加入可執(zhí)行文件中,而是在程序被執(zhí)行的時(shí)候加載。222GCC編譯器(cont.)三、GCC的常用選項(xiàng)GCC的命令行格式:gcc[參數(shù)]要編譯的文件[參數(shù)][目標(biāo)文件]常用選項(xiàng):-c編譯為目標(biāo)文件,不連接庫(kù)-S編譯為匯編代碼-E預(yù)處理.預(yù)處理之后的代碼將送往標(biāo)準(zhǔn)輸出-Wwarn...設(shè)置警告,可以設(shè)置的警告開關(guān)很多,通常用-Wall開啟所有的警告232GCC編譯器(cont.)-Olevel
設(shè)置優(yōu)化級(jí)別,level可以是0,1,2,3或者s,默認(rèn)為-O0,即不進(jìn)行優(yōu)化處理.-Dname=definition...在命令行上定義宏,有兩種方式,-Dname或者-Dname=definition.在命令行上設(shè)置宏定義的目的主要是為了在調(diào)試的時(shí)候設(shè)定一些開關(guān),而在發(fā)布的時(shí)候再關(guān)閉或者打開這些開關(guān)即可,當(dāng)然宏定義也用來對(duì)代碼進(jìn)行有選擇地編譯.另外也還有其他的一些作用.242GCC編譯器(cont.)-Uname
取消宏定義name,作用和上面的正好相反.-Idir...把dir加到頭文件的搜索路徑中,而且gcc會(huì)在搜索標(biāo)準(zhǔn)頭文件之前先搜索dir.-llibrary
在連接的時(shí)候搜索library庫(kù).庫(kù)是一些archieve文件--其成員是目標(biāo)文件.如果有文件引用library,library在命令行的位置應(yīng)該在那個(gè)文件之后,因此,越底層的庫(kù)越要放在后面.比如如果你要連接pcap庫(kù),那么你就需要使用-lpcap對(duì)源文件進(jìn)行編譯.-Ldir...把dir加到庫(kù)文件的搜索路徑中,而且gcc會(huì)在搜索標(biāo)準(zhǔn)庫(kù)文件之前先搜索dir.252GCC編譯器(cont.)-g產(chǎn)生調(diào)試信息.GDB能夠使用這些調(diào)試信息。-ooutfile
指定輸出文件的文件名,默認(rèn)為a.out-mmachine-option...指定所用的平臺(tái).262GCC編譯器(cont.)下面將以一個(gè)實(shí)例來說明如何使用gcc編譯器。例1能夠幫助大家迅速理解gcc的工作原理例1
hello.c----------------------------#include<stdio.h>intmain(int
argc,char**argv){printf(“HelloLinux!\n");}272GCC編譯器(cont.)要編譯這個(gè)程序,只要在命令行下執(zhí)行如下命令:[larry@LARRYroot]#gcc
hello.c-ohello[larry@LARRYroot]#./hello這樣,gcc編譯器會(huì)生成一個(gè)名為hello的可執(zhí)行文件,然后執(zhí)行./hello就可以看到程序的輸出結(jié)果了。在終端上顯示:HelloLinux!282GCC編譯器(cont.)命令行中g(shù)cc表示用gcc來編譯源程序,-o選項(xiàng)表示要求編譯器輸出的可執(zhí)行文件名為hello,而hello.c是源程序文件。從程序員的角度看,只需簡(jiǎn)單地執(zhí)行一條gcc命令就可以了;但從編譯器的角度來看,卻需要完成一系列非常繁雜的工作。首先,gcc需要調(diào)用預(yù)處理程序cpp,由它負(fù)責(zé)展開在源文件中定義的宏,并向其中插入#include語(yǔ)句所包含的內(nèi)容;接著,gcc會(huì)調(diào)用ccl和as將處理后的源代碼編譯成目標(biāo)代碼;最后,gcc會(huì)調(diào)用鏈接程序ld,把生成的目標(biāo)代碼鏈接成一個(gè)可執(zhí)行程序。293GDB調(diào)試器Gdb是一款GNU開發(fā)組織并發(fā)布的UNIX/Linux下的程序調(diào)試工具。它使你能在程序運(yùn)行時(shí)觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存的使用情況.以下是gdb
所提供的一些功能:它使你能監(jiān)視你程序中變量的值.它使你能設(shè)置斷點(diǎn)以使程序在指定的代碼行上停止執(zhí)行.它使你能一行行的執(zhí)行你的代碼.303GDB調(diào)試器(cont.)Gdb的使用方法:Gdb[option][executable-file[core-fileorprocess-id]gdb基本命令.
file裝入想要調(diào)試的可執(zhí)行文件.kill終止正在調(diào)試的程序list列出產(chǎn)生執(zhí)行文件的源代碼的一部分.next執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部.313GDB調(diào)試器(cont.)step執(zhí)行一行源代碼而且進(jìn)入函數(shù)內(nèi)部.run執(zhí)行當(dāng)前被調(diào)試的程序quit終止gdbwatch
使你能監(jiān)視一個(gè)變量的值而不管它何時(shí)被改變.break在代碼里設(shè)置斷點(diǎn),這將使程序執(zhí)行到這里時(shí)被掛起.make使你能不退出gdb
就可以重新產(chǎn)生可執(zhí)行文件.shell使你能不離開gdb
就執(zhí)行UNIXshell命令.
324工程管理器Make
Make是用于自動(dòng)編譯、鏈接程序的實(shí)用工具。在開發(fā)一個(gè)項(xiàng)目時(shí),通常是將項(xiàng)目分成許多功能模塊,每個(gè)功能模塊又可能被分成許多子模塊,而這些子模塊一般就是一個(gè)程序文件。小的項(xiàng)目通常都有十幾個(gè)或者幾十個(gè)文件,而大的項(xiàng)目則會(huì)有上百個(gè)甚至上千個(gè)文件。如果要一個(gè)一個(gè)的編譯每個(gè)文件,這個(gè)工作是非常繁瑣的,使用make后就不需要手工的編譯每個(gè)程序文件。除了要寫一個(gè)makefile
文件外,通常所需要做的事情就是在命令行敲入“make”,然后所有的事情都由make來完成。334工程管理器Make(cont.)
makefile的宗旨就是讓編譯器知道要編譯一個(gè)文件需要依賴其他的哪些文件。當(dāng)那些依賴文件有了改變,編譯器會(huì)自動(dòng)的發(fā)現(xiàn)最終的生成文件已經(jīng)過時(shí),而重新編譯相應(yīng)的模塊。默認(rèn)情況下,GNUmake工具在當(dāng)前工作目錄中按如下順序搜索makefile:*GNUmakefile*makefile*Makefile344工程管理器Make(cont.)一、Makefile的基本結(jié)構(gòu)一個(gè)簡(jiǎn)單的Makefile文件包含一系列的“規(guī)則”,其樣式如下:
目標(biāo)(target):依賴(prerequiries)…
<tab>命令(command)
目標(biāo)(target)通常是要產(chǎn)生的文件的名稱,目標(biāo)的例子是可執(zhí)行文件或OBJ文件。目標(biāo)也可是一個(gè)執(zhí)行的動(dòng)作名稱,這樣的目標(biāo)通常稱為偽目標(biāo)(PHONY)諸如‘clean’。
依賴是用來輸入從而產(chǎn)生目標(biāo)的文件,一個(gè)目標(biāo)經(jīng)常有幾個(gè)依賴。354工程管理器Make(cont.)命令是Make執(zhí)行的動(dòng)作,一個(gè)規(guī)則可以含有幾個(gè)命令,每個(gè)命令占一行。注意:每個(gè)命令行前面必須是一個(gè)Tab字符,即命令行第一個(gè)字符是Tab。這是不小心容易出錯(cuò)的地方。一個(gè)makefile
文件中可定義多個(gè)目標(biāo),利用maketarget命令可指定要編譯的目標(biāo),如果不指定目標(biāo),則使用第一個(gè)目標(biāo)。364工程管理器Make(cont.)
Makefile文件示例(FromGNUmakemanual)374工程管理器Make(cont.)二、make處理Makefile的過程缺省情況下,make開始于第一個(gè)目標(biāo)(假想目標(biāo)的名稱前帶‘.’)。這個(gè)目標(biāo)稱為缺省最終目標(biāo)(即make最終更新的目標(biāo),具體內(nèi)容請(qǐng)看指定最終目標(biāo)的參數(shù)一節(jié))。
在前面的例子中,缺省最終目標(biāo)是更新可執(zhí)行文件‘edit’,所以我們將該規(guī)則設(shè)為第一規(guī)則。這樣,一旦您給出命令:
make
make就會(huì)讀當(dāng)前目錄下的makefile文件,并開始處理第一條規(guī)則。384工程管理器Make(cont.)
在本例中,第一條規(guī)則是連接生成‘edit’,但在make全部完成本規(guī)則工作之前,必須先處理‘edit’所依靠的OBJ文件。這些OBJ文件按照各自的規(guī)則被處理更新,每個(gè)OBJ文件的更新規(guī)則是編譯其源文件。重新編譯根據(jù)其依靠的源文件或頭文件是否比現(xiàn)存的OBJ文件更‘新’,或者OBJ文件是否存在來判斷。
其它規(guī)則的處理根據(jù)它們的目標(biāo)是否和缺省最終目標(biāo)的依賴相關(guān)聯(lián)來判斷。如果一些規(guī)則和缺省最終目標(biāo)無(wú)任何關(guān)聯(lián)則這些規(guī)則不會(huì)被執(zhí)行,除非告訴Make強(qiáng)制執(zhí)行(如輸入執(zhí)行makeclean命令)。394工程管理器Make(cont.)
在OBJ文件重新編譯之前,Make首先檢查它的依賴C語(yǔ)言源文件和C語(yǔ)言頭文件是否需要更新。如果這些C語(yǔ)言源文件和C語(yǔ)言頭文件不是任何規(guī)則的目標(biāo),make將不會(huì)對(duì)它們做任何事情。在OBJ文件重新編譯(如果需要的話)之后,make決定是否重新連接生成edit可執(zhí)行文件。如果edit可執(zhí)行文件不存在或任何一個(gè)OBJ文件比存在的edit可執(zhí)行文件‘新’,則make重新連接生成edit可執(zhí)行文件。404工程管理器Make(cont.)
如果我們修改了‘insert.c’文件,然后運(yùn)行make,make將會(huì)編譯‘insert.c’文件更新‘insert.o’文件,然后重新連接生成edit可執(zhí)行文件。如果我們修改了‘command.h’文件,然后運(yùn)行make,make將會(huì)重新編譯‘kbd.o’和‘command.o’文件,然后重新連接生成edit可執(zhí)行文件。
414工程管理器Make(cont.)三、Makefile變量為了簡(jiǎn)化編輯和維護(hù)Makefile,make允許在Makefile中創(chuàng)建和使用變量。變量是在Makefile中定義的名字,用來代替一個(gè)文本字符串,該文本字符串稱為該變量的值。變量可以用來替代目標(biāo)體、依賴文件、命令及makefile中的其他部分。如前面的makefile例子可改寫為如下形式:424工程管理器Make(cont.)434工程管理器Make(cont.)1)makefile中變量的定義方式和引用
GNUmake中,一個(gè)變量的定義有兩種方式(或者稱為風(fēng)格)。我們把這兩種方式定義的變量可以看作變量的兩種不同風(fēng)格。變量的這兩種不同的風(fēng)格的區(qū)別在于:1.定義方式;2.展開時(shí)機(jī)。下邊我們分別對(duì)這兩種不同的風(fēng)格進(jìn)行詳細(xì)地討論。444工程管理器Make(cont.)第一種風(fēng)格的變量就是遞歸方式擴(kuò)展的變量。這一類型的變量的定義是通過“=”或者使用指示符“define”定義的變量。對(duì)這種變量的引用,在引用的地方是嚴(yán)格的文本替換過程,此變量值的字符串原模原樣的出現(xiàn)在引用它的地方。如果此變量定義中存在對(duì)其他變量的引用,這些被引用的變量會(huì)在它被展開的同時(shí)被展開。就是說在變量定義時(shí),變量值中對(duì)其他變量的引用不會(huì)被替換展開。而是,變量在引用它的地方進(jìn)行替換展開的同時(shí),它所引用的其它變量才會(huì)被替換展開。語(yǔ)言的描述可能比較晦澀,讓我們來看一個(gè)例子:454工程管理器Make(cont.)
foo=$(bar)
bar=$(ugh)
ugh=Huh?
all: echo$(foo)
執(zhí)行“make”將會(huì)打印出“Huh?”。整個(gè)變量的替換過程時(shí)這樣的:首先“$(foo)”被替換為“$(bar)”,接下來“$(bar)”被替換為“$(ugh)”,最后“$(ugh)”被替換為“Hug?”。整個(gè)替換的過程是在執(zhí)行“echo$(foo)”是進(jìn)行的。464工程管理器Make(cont.)在GNUmake中可以使用另外一種風(fēng)格的變量,我們將它稱為“直接展開”式。這種風(fēng)格的變量使用“:=”來定義變量。在使用“:=”定義變量時(shí),變量值中對(duì)另外變量的引用或者函數(shù)的引用在定義時(shí)被展開(對(duì)變量進(jìn)行替換)。所以在變量被定義以后就是一個(gè)實(shí)際所需要定義的文本串,其中不再包含任何對(duì)其它變量的引用。因此474工程管理器Make(cont.)
x:=foo
y:=$(x)bar
x:=later
就等價(jià)于:
y:=foobar
x:=later
需要注意的是:此風(fēng)格變量在定義時(shí)就完成了對(duì)所引用的變量的展開,因此它不能實(shí)現(xiàn)對(duì)其后定義變量的引用。484工程管理器Make(cont.)變量一旦定義之后,就可以通過將變量名用圓括號(hào)包起來,并在前面加上$符號(hào)($(var))來進(jìn)行引用。如果引用了一個(gè)未定義的變量,則認(rèn)為其值為空。2)Makefile中常見的預(yù)定義變量和自動(dòng)變量494工程管理器Make(cont.)自動(dòng)變量
$*
不包含擴(kuò)展名的目標(biāo)文件名稱。
$+
所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件。
$<
第一個(gè)依賴文件的名稱。
$?
所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標(biāo)的創(chuàng)建日期晚。
$@
目標(biāo)的完整名稱。
$^
所有的依賴文件,以空格分開,不包含重復(fù)的依賴文件。
$%
如果目標(biāo)是歸檔成員,則該變量表示目標(biāo)的歸檔成員名稱。例如,如果目標(biāo)名稱為mytarget.so(image.o),則$@為mytarget.so,而$%為image.o。504工程管理器Make(cont.)常見的預(yù)定義變量
AR
歸檔維護(hù)程序的名稱,默認(rèn)值為ar。
ARFLAGS
歸檔維護(hù)程序的選項(xiàng)。
AS
匯編程序的名稱,默認(rèn)值為as。
ASFLAGS
匯編程序的選項(xiàng)。
CC
C編譯器的名稱,默認(rèn)值為cc。
CCFLAGS
C編譯器的選項(xiàng)。
CPP
C預(yù)編譯器的名稱,默認(rèn)值為$(CC)-E。
CPPFLAGS
C預(yù)編譯的選項(xiàng)。
CXX
C++編譯器的名稱,默認(rèn)值為g++。
CXXFLAGS
C++編譯器的選項(xiàng)。
FC
FORTRAN編譯器的名稱,默認(rèn)值為f77。
FFLAGS
FORTRAN編譯器的選項(xiàng)。514工程管理器Make(cont.)四、Makfile規(guī)則
Makfile的規(guī)則是Make進(jìn)行處理的依據(jù),它包括了目標(biāo)體、依賴文件及其之間的命令語(yǔ)句。在Makefile中,還可以使用隱式規(guī)則和模式規(guī)則。524工程管理器Make(cont.)
在使用隱式規(guī)則時(shí),只要把目標(biāo)文件列出即可,不需要指定編譯的具體細(xì)節(jié)。使用隱式規(guī)則的“helloworld”程序的makefile文件如下所示:
OBJS= hello.oCC=gcchello:$(OBJS) $(CC)$^-o$@534工程管理器Make(cont.)模式規(guī)則是用來定義多個(gè)文件的相同處理規(guī)則。其格式類似于普通規(guī)則,這個(gè)規(guī)則中相關(guān)文件前必須用“%”標(biāo)明。上例使用模式規(guī)則修改后的Makefile文件如下:
OBJS=hello.oCC=gcchello:$(OBJS) $(CC)$^-o$@%.o:%.c $(CC)–c$<-o$@544工程管理器Make(cont.)五、make的使用usage:make[options][target]…常見的選項(xiàng):-CDIR
讀取makefile
之前改變到指定的目錄DIR。-fFILE
以指定的FILE文件作為makefile。-h
顯示所有的make選項(xiàng)。-i
忽略所有的命令執(zhí)行錯(cuò)誤。-IDIR
當(dāng)包含其他makefile
文件時(shí),可利用該選項(xiàng)指定搜索目錄。-n
只打印要執(zhí)行的命令,但不執(zhí)行這些命令。-p
顯示make變量數(shù)據(jù)庫(kù)和隱含規(guī)則。-s
在執(zhí)行命令時(shí)不顯示命令。-w
在處理makefile
之前和之后,顯示工作目錄。555使用GnuAutotoolsGnu提供了一系列的工具用于幫助開發(fā)人員收集系統(tǒng)配置信息并自動(dòng)生成Makefile文件。這套工具包括:1、aclocal2、autoscan3、autoconf4、autoheader5、automake565使用GnuAutotools(cont.)Autotools的使用流程第一步:手工編寫Makefile.am這個(gè)文件第二步:在源代碼目錄樹的最高層運(yùn)行autoscan。然后手動(dòng)修改configure.scan文件,并改名為configure.ac/con
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車零配件質(zhì)量控制與驗(yàn)收考核試卷
- 碩士生職學(xué)融合規(guī)劃
- 吉林省公主嶺第五中學(xué)2024-2025學(xué)年高考押題金卷(全國(guó)卷Ⅲ)歷史試題試卷含解析
- 山西警官職業(yè)學(xué)院《高級(jí)日語(yǔ)聽力》2023-2024學(xué)年第一學(xué)期期末試卷
- 山西省大同市云岡區(qū)翰林學(xué)校2024-2025學(xué)年數(shù)學(xué)四下期末學(xué)業(yè)水平測(cè)試試題含解析
- 天津美術(shù)學(xué)院《幼兒行為觀察與評(píng)價(jià)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西省奉新一中2025年普通高中高三教學(xué)質(zhì)量檢測(cè)試題(一)生物試題含解析
- 山東省濱州市濱城區(qū)三河湖鎮(zhèn)第四小學(xué)2024-2025學(xué)年小升初全真模擬數(shù)學(xué)檢測(cè)卷含解析
- 四川輕化工大學(xué)《新安醫(yī)家針灸學(xué)說》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西南昌市心遠(yuǎn)中學(xué)度重點(diǎn)中學(xué)2025年初三二診測(cè)試(化學(xué)試題理)試題含解析
- 國(guó)開2024年秋中國(guó)建筑史(本)終考任務(wù)答案
- 中華人民共和國(guó)農(nóng)村集體經(jīng)濟(jì)組織法
- 中藥學(xué)電子版教材
- GA∕T 1622-2019 法庭科學(xué) 生物檢材中沙蠶毒素、殺蟲雙、殺蟲環(huán)和殺螟丹檢驗(yàn) 氣相色譜、氣相色譜-質(zhì)譜和液相色譜-質(zhì)譜法
- 國(guó)際商事仲裁法
- 區(qū)域電力系統(tǒng)規(guī)劃設(shè)計(jì)開題報(bào)告
- 居民企業(yè)資產(chǎn)股權(quán)劃轉(zhuǎn)特殊性稅務(wù)處理申報(bào)表
- 高層建筑無(wú)地下室傾覆及滑移計(jì)算
- 有機(jī)無(wú)機(jī)復(fù)混肥生產(chǎn)職位操作規(guī)程
- ERP生產(chǎn)管理系統(tǒng)用戶手冊(cè)(共51頁(yè))
- 封條模板(A3紙)
評(píng)論
0/150
提交評(píng)論