makefile_進(jìn)階_第1頁(yè)
已閱讀1頁(yè),還剩71頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、LinuxUnix環(huán)境下的make和makefile詳解(非常詳細(xì)推薦!)收藏?zé)o論是在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)系。

2、而且如此多的源文件,如果每次都要鍵入gcc命令進(jìn)行編譯的話,那對(duì)程序員來(lái)說(shuō)簡(jiǎn)直就是一場(chǎng)災(zāi)難。而make工具則可自動(dòng)完成編譯工作,并且可以只對(duì)程序員在上次編譯后修改過(guò)的部分進(jìn)行編譯。因此,有效的利用make和makefile工具可以大大提高項(xiàng)目開發(fā)的效率。同時(shí)掌握make和makefile之后,您也不會(huì)再面對(duì)著Linux下的應(yīng)用軟件手足無(wú)措了。但令人遺憾的是,在許多講述Linux應(yīng)用的書籍上都沒(méi)有詳細(xì)介紹這個(gè)功能強(qiáng)大但又非常復(fù)雜的編譯工具

3、。在這里我就向大家詳細(xì)介紹一下make及其描述文件makefile。Makefile文件Make工具最主要也是最基本的功能就是通過(guò)makefile文件來(lái)描述源程序之間的相互關(guān)系并自動(dòng)維護(hù)編譯工作。而makefile文件需要按照某種語(yǔ)法進(jìn)行編寫,文件中需要說(shuō)明如何編譯各個(gè)源文件并連接生成可執(zhí)行文件,并要求定義源文件之間的依賴關(guān)系。makefile文件是許多編譯器包括WindowsNT下的編譯器維護(hù)編譯信息的常用方法,只是在集成開發(fā)環(huán)境中,

4、用戶通過(guò)友好的界面修改makefile文件而已。在UNIX系統(tǒng)中,習(xí)慣使用Makefile作為makfile文件。如果要使用其他文件作為makefile,則可利用類似下面的make命令選項(xiàng)指定makefile文件:$makefMakefile.debug例如,一個(gè)名為prog的程序由三個(gè)C源文件filea.c、fileb.c和filec.c以及庫(kù)文件LS編譯生成,這三個(gè)文件還分別包含自己的頭文件a.h、b.h和c.h。通常情況下,C編譯

5、器將會(huì)輸出三個(gè)目標(biāo)文件filea.o、fileb.o和filec.o。假設(shè)filea.c和fileb.c都要聲明用到一個(gè)名為defs的文件,但filec.c不用。即在filea.c和fileb.c里都有這樣的聲明:#include“defs“那么下面的文檔就描述了這些文件之間的相互聯(lián)系:#Itisaexamplefdescribingmakefileprog:filea.ofileb.ofilec.occfilea.ofileb.ofi

6、lec.oLSoprogfilea.o:filea.ca.hdefscccfilea.cfileb.o:fileb.cb.hdefscccfileb.cfilec.o:filec.cc.hcccfilec.c這個(gè)描述文檔就是一個(gè)簡(jiǎn)單的makefile文件。從上面的例子注意到,第一個(gè)字符為#的行為注釋行。第一個(gè)非注釋行指定prog由三個(gè)目標(biāo)文件filea.o、fileb.o和filec.o鏈接生成。第三行描述了如何從prog所依賴的文件建

7、立可執(zhí)行文件。接下來(lái)的4、6、8行分別指定三個(gè)目標(biāo)文件,以及它們所依賴的.c和.h文件以及defs文件。而5、7、9行則指定了如何從目標(biāo)所依賴的文件建立目標(biāo)。當(dāng)filea.c或a.h文件在編譯之后又被修改,則make工具可自動(dòng)重新編譯filea.o,如要編譯的目標(biāo)文件。其標(biāo)準(zhǔn)形式為:target1[target2…]:[:][dependent1…][comms][#…][(tab)comms][#…]方括號(hào)中間的部分表示可選項(xiàng)。Tar

8、gets和dependents當(dāng)中可以包含字符、數(shù)字、句點(diǎn)和““符號(hào)。除了引用,comms中不能含有“#“也不允許換行。在通常的情況下命令行參數(shù)中只含有一個(gè)“:“,此時(shí)comm序列通常和makefile文件中某些定義文件間依賴關(guān)系的描述行有關(guān)。如果與目標(biāo)相關(guān)連的那些描述行指定了相關(guān)的comm序列,那么就執(zhí)行這些相關(guān)的comm命令,即使在分號(hào)和(tab)后面的aomm字段甚至有可能是NULL。如果那些與目標(biāo)相關(guān)連的行沒(méi)有指定comm,那么

9、將調(diào)用系統(tǒng)默認(rèn)的目標(biāo)文件生成規(guī)則。如果命令行參數(shù)中含有兩個(gè)冒號(hào)“::“,則此時(shí)的comm序列也許會(huì)和makefile中所有描述文件依賴關(guān)系的行有關(guān)。此時(shí)將執(zhí)行那些與目標(biāo)相關(guān)連的描述行所指向的相關(guān)命令。同時(shí)還將執(zhí)行buildin規(guī)則。如果在執(zhí)行comm命令時(shí)返回了一個(gè)非“0“的出錯(cuò)信號(hào),例如makefile文件中出現(xiàn)了錯(cuò)誤的目標(biāo)文件名或者出現(xiàn)了以連字符打頭的命令字符串,make操作一般會(huì)就此終止,但如果make后帶有“i“參數(shù),則make

10、將忽略此類出錯(cuò)信號(hào)。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)輸入。如果沒(méi)有“f“參數(shù),則系統(tǒng)將默認(rèn)當(dāng)前目錄下名為makefile或者名為Makefile的文件為描述文件。在Linux中,GNU

11、make工具在當(dāng)前工作目錄中按照GNUmakefile、makefile、Makefile的順序搜索makefile文件。i忽略命令執(zhí)行返回的出錯(cuò)信息。s沉默模式,在執(zhí)行之前不輸出相應(yīng)的命令行信息。r禁止使用buildin規(guī)則。n非執(zhí)行模式,輸出所有執(zhí)行命令,但并不執(zhí)行。t更新目標(biāo)文件。qmake操作將根據(jù)目標(biāo)文件是否已經(jīng)更新返回“0“或非“0“的狀態(tài)信息。p輸出所有宏定義和目標(biāo)文件描述。dDebug模式,輸出有關(guān)文件和檢測(cè)時(shí)間的詳細(xì)信

12、息。Linux下make標(biāo)志位的常用選項(xiàng)與Unix系統(tǒng)中稍有不同,下面我們只列出了不同部分:cdir在讀取makefile之前改變到指定的目錄dir。Idir當(dāng)包含其他makefile文件時(shí),利用該選項(xiàng)指定搜索目錄。hhelp文擋,顯示所有的make選項(xiàng)。w在處理makefile之前和之后,都顯示工作目錄。通過(guò)命令行參數(shù)中的target,可指定make要編譯的目標(biāo),并且允許同時(shí)定義編譯多個(gè)目標(biāo),操作時(shí)按照從左向右的順序依次編譯targe

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論