版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、LinuxUnix環(huán)境下的make和makefile詳解(非常詳細推薦!)收藏無論是在Linux還是在Unix環(huán)境中,make都是一個非常重要的編譯命令。不管是自己進行項目開發(fā)還是安裝應(yīng)用軟件,我們都經(jīng)常要用到make或makeinstall。利用make工具,我們可以將大型的開發(fā)項目分解成為多個更易于管理的模塊,對于一個包括幾百個源文件的應(yīng)用程序,使用make和makefile工具就可以簡潔明快地理順各個源文件之間紛繁復(fù)雜的相互關(guān)系。
2、而且如此多的源文件,如果每次都要鍵入gcc命令進行編譯的話,那對程序員來說簡直就是一場災(zāi)難。而make工具則可自動完成編譯工作,并且可以只對程序員在上次編譯后修改過的部分進行編譯。因此,有效的利用make和makefile工具可以大大提高項目開發(fā)的效率。同時掌握make和makefile之后,您也不會再面對著Linux下的應(yīng)用軟件手足無措了。但令人遺憾的是,在許多講述Linux應(yīng)用的書籍上都沒有詳細介紹這個功能強大但又非常復(fù)雜的編譯工具
3、。在這里我就向大家詳細介紹一下make及其描述文件makefile。Makefile文件Make工具最主要也是最基本的功能就是通過makefile文件來描述源程序之間的相互關(guān)系并自動維護編譯工作。而makefile文件需要按照某種語法進行編寫,文件中需要說明如何編譯各個源文件并連接生成可執(zhí)行文件,并要求定義源文件之間的依賴關(guān)系。makefile文件是許多編譯器包括WindowsNT下的編譯器維護編譯信息的常用方法,只是在集成開發(fā)環(huán)境中,
4、用戶通過友好的界面修改makefile文件而已。在UNIX系統(tǒng)中,習慣使用Makefile作為makfile文件。如果要使用其他文件作為makefile,則可利用類似下面的make命令選項指定makefile文件:$makefMakefile.debug例如,一個名為prog的程序由三個C源文件filea.c、fileb.c和filec.c以及庫文件LS編譯生成,這三個文件還分別包含自己的頭文件a.h、b.h和c.h。通常情況下,C編譯
5、器將會輸出三個目標文件filea.o、fileb.o和filec.o。假設(shè)filea.c和fileb.c都要聲明用到一個名為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這個描述文檔就是一個簡單的makefile文件。從上面的例子注意到,第一個字符為#的行為注釋行。第一個非注釋行指定prog由三個目標文件filea.o、fileb.o和filec.o鏈接生成。第三行描述了如何從prog所依賴的文件建
7、立可執(zhí)行文件。接下來的4、6、8行分別指定三個目標文件,以及它們所依賴的.c和.h文件以及defs文件。而5、7、9行則指定了如何從目標所依賴的文件建立目標。當filea.c或a.h文件在編譯之后又被修改,則make工具可自動重新編譯filea.o,如要編譯的目標文件。其標準形式為:target1[target2…]:[:][dependent1…][comms][#…][(tab)comms][#…]方括號中間的部分表示可選項。Tar
8、gets和dependents當中可以包含字符、數(shù)字、句點和““符號。除了引用,comms中不能含有“#“也不允許換行。在通常的情況下命令行參數(shù)中只含有一個“:“,此時comm序列通常和makefile文件中某些定義文件間依賴關(guān)系的描述行有關(guān)。如果與目標相關(guān)連的那些描述行指定了相關(guān)的comm序列,那么就執(zhí)行這些相關(guān)的comm命令,即使在分號和(tab)后面的aomm字段甚至有可能是NULL。如果那些與目標相關(guān)連的行沒有指定comm,那么
9、將調(diào)用系統(tǒng)默認的目標文件生成規(guī)則。如果命令行參數(shù)中含有兩個冒號“::“,則此時的comm序列也許會和makefile中所有描述文件依賴關(guān)系的行有關(guān)。此時將執(zhí)行那些與目標相關(guān)連的描述行所指向的相關(guān)命令。同時還將執(zhí)行buildin規(guī)則。如果在執(zhí)行comm命令時返回了一個非“0“的出錯信號,例如makefile文件中出現(xiàn)了錯誤的目標文件名或者出現(xiàn)了以連字符打頭的命令字符串,make操作一般會就此終止,但如果make后帶有“i“參數(shù),則make
10、將忽略此類出錯信號。Make命本身可帶有四種參數(shù):標志、宏定義、描述文件名和目標文件名。其標準形式為:Make[flags][macrodefinitions][targets]Unix系統(tǒng)下標志位flags選項及其含義為:ffile指定file文件為描述文件,如果file參數(shù)為““符,那么描述文件指向標準輸入。如果沒有“f“參數(shù),則系統(tǒng)將默認當前目錄下名為makefile或者名為Makefile的文件為描述文件。在Linux中,GNU
11、make工具在當前工作目錄中按照GNUmakefile、makefile、Makefile的順序搜索makefile文件。i忽略命令執(zhí)行返回的出錯信息。s沉默模式,在執(zhí)行之前不輸出相應(yīng)的命令行信息。r禁止使用buildin規(guī)則。n非執(zhí)行模式,輸出所有執(zhí)行命令,但并不執(zhí)行。t更新目標文件。qmake操作將根據(jù)目標文件是否已經(jīng)更新返回“0“或非“0“的狀態(tài)信息。p輸出所有宏定義和目標文件描述。dDebug模式,輸出有關(guān)文件和檢測時間的詳細信
12、息。Linux下make標志位的常用選項與Unix系統(tǒng)中稍有不同,下面我們只列出了不同部分:cdir在讀取makefile之前改變到指定的目錄dir。Idir當包含其他makefile文件時,利用該選項指定搜索目錄。hhelp文擋,顯示所有的make選項。w在處理makefile之前和之后,都顯示工作目錄。通過命令行參數(shù)中的target,可指定make要編譯的目標,并且允許同時定義編譯多個目標,操作時按照從左向右的順序依次編譯targe
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- makefile
- makefile詳解
- makefile
- makefile教程
- makefile手冊
- sample.makefile.txt
- sample.makefile.txt
- sample.makefile.txt
- sample.makefile.txt
- sample.makefile.txt
- sample.makefile.txt
- sample.makefile.txt
- sample.makefile.txt
- sample.makefile.txt
- 采購管理進階
- linux內(nèi)核的makefile(中文版+英文版)
- 進階領(lǐng)導(dǎo)之路
- 土建進階詞匯
- 水果進階美味料理
- 9進階詞名詞
評論
0/150
提交評論