版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、GNUMake中文手冊(cè)中文手冊(cè)v3.8學(xué)習(xí)學(xué)習(xí)?這個(gè)手冊(cè)翻譯整理翻譯整理:徐海兵徐海兵先表示一些尊敬.“本人在工作之余,花了18個(gè)多月時(shí)間完成對(duì)“infomake”的翻譯整理,完成這個(gè)中文版手冊(cè)”工夫不負(fù)有心人.?鏈接器將.o文件中使用的函數(shù)和其它.o或者庫文件中的相關(guān)符號(hào)進(jìn)行合并,對(duì)所有文件中的符號(hào)進(jìn)行重新安排(重定位),并鏈接系統(tǒng)相關(guān)文件(程序啟動(dòng)文件等)最終生成可執(zhí)行程序。?Linux中,共享庫文件格式通常為“ELF”格式。共享庫
2、已經(jīng)具備了可執(zhí)行條件。?模塊中各個(gè)成員的地址(變量引用和函數(shù)調(diào)用)都是相對(duì)地址。使用此共享庫的程序在運(yùn)行時(shí),共享庫被動(dòng)態(tài)加載到內(nèi)存并和主程序在內(nèi)存中進(jìn)行連接。多個(gè)可執(zhí)行程序可共享庫文件的代碼段(多個(gè)程序可以共享的使用庫中的某一個(gè)模塊,共享代碼,不共享數(shù)據(jù))。另外共享庫的另外共享庫的成員對(duì)象可被執(zhí)行(由成員對(duì)象可被執(zhí)行(由libdl.so提供支持)提供支持)。?在make讀取Makefile以后會(huì)建立一個(gè)編譯過程的描述數(shù)據(jù)庫。此數(shù)據(jù)庫中記
3、錄了所有各個(gè)文件之間的相互關(guān)系,以及它們的關(guān)系描述(要是我能要是我能“看“到這個(gè)數(shù)據(jù)庫,就能使用程序到這個(gè)數(shù)據(jù)庫,就能使用程序trace,你知道一個(gè)大型的,你知道一個(gè)大型的project的makefile有多復(fù)雜有多復(fù)雜)?當(dāng)使用make工具進(jìn)行編譯時(shí),工程中以下幾種文件在執(zhí)行make時(shí)將會(huì)被編譯(重新編譯):1.所有的源文件沒有被編譯過,則對(duì)各個(gè)C源文件進(jìn)行編譯并進(jìn)行鏈接,生成最后的可執(zhí)行程序;2.每一個(gè)在上次執(zhí)行make之后修改過的
4、C源代碼文件在本次執(zhí)行make時(shí)將會(huì)被重新編譯;3.頭文件在上一次執(zhí)行頭文件在上一次執(zhí)行make之后被修改。則所有包含此頭文件的之后被修改。則所有包含此頭文件的C源文件在本次執(zhí)行源文件在本次執(zhí)行make時(shí)將會(huì)被重新編譯。時(shí)將會(huì)被重新編譯。(這就是為什么頭文件修改后,很多文件都會(huì)被重新這就是為什么頭文件修改后,很多文件都會(huì)被重新compile的原的原因)?首先書寫時(shí),可以將一個(gè)較長行使用反斜線()來分解為多行,這樣可以使我們的Makefi
5、le書寫清晰、容易閱讀理解。但需要注意:反斜線之后不能有空格(這也是大家最容易犯但需要注意:反斜線之后不能有空格(這也是大家最容易犯的錯(cuò)誤,錯(cuò)誤比較隱蔽)的錯(cuò)誤,錯(cuò)誤比較隱蔽)?編譯.c源文件規(guī)則的命令可以不用明確給出。這是因?yàn)閙ake本身存在一個(gè)默認(rèn)的規(guī)則,能夠自動(dòng)完成對(duì).c文件的編譯并生成對(duì)應(yīng)的.o文件。它執(zhí)行命令“ccc”來編譯.c源文件。?對(duì)一個(gè)目標(biāo)文件是“N.o”,倚賴文件是“N.c”的規(guī)則,完全可以省略其規(guī)則的命令行,而由m
6、ake自身決定使用默認(rèn)命令。此默認(rèn)規(guī)則稱為make的隱含規(guī)則。?書寫規(guī)則建議的方式是:單目標(biāo),多依賴。就是說盡量要做到一個(gè)規(guī)則中只存在一個(gè)目標(biāo)書寫規(guī)則建議的方式是:單目標(biāo),多依賴。就是說盡量要做到一個(gè)規(guī)則中只存在一個(gè)目標(biāo)文件,可有多個(gè)依賴文件。盡量避免多目標(biāo),單依賴的方式。文件,可有多個(gè)依賴文件。盡量避免多目標(biāo),單依賴的方式。這樣后期維護(hù)也會(huì)非常方便,而且Makefile會(huì)更清晰、明了。?在這個(gè)Makefile中,根據(jù)依賴而不是目標(biāo)對(duì)規(guī)
7、則進(jìn)行分組根據(jù)依賴而不是目標(biāo)對(duì)規(guī)則進(jìn)行分組(Wrong!)。上例的Makefile就可以這樣來實(shí)現(xiàn):#sampleMakefileobjects=main.okbd.ocomm.odisplay.o.osearch.ofiles.outils.o在規(guī)則中,通配符會(huì)被自動(dòng)展開。但在變量的定義和函數(shù)引用時(shí),通配符將失效。這種情況下如果需要通配符有效,就需要使用函數(shù)“wildcard”,它的用法是:$(wildcardPATTERN...)。
8、?在Makefile中,它被展開為已經(jīng)存在的、使用空格分開的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函數(shù)會(huì)忽略模式字符并返回空。?一般我們可以使用“$(wildcard.c)”來獲取工作目錄下的所有的.c文件列表。復(fù)雜一些用法;可以使用“$(patsubst%.c%.o$(wildcard.c))”,首先使用“wildcard”函數(shù)獲取工作目錄下的.c文件列表;之后將列表中所有文件名的后綴.c替換為.o。這樣我們就可
9、以得到在當(dāng)前目錄可生成的.o文件列表。因此在一個(gè)目錄下可以使用如下內(nèi)容的Makefile來將工作目錄下的所有的.c文件進(jìn)行編譯并最后連接成為一個(gè)可執(zhí)行文件:#sampleMakefileobjects:=$(patsubst%.c%.o$(wildcard.c))foo:$(objects)ccofoo$(objects)?“自動(dòng)化變量”,諸如“$^”等。規(guī)則命令行中的自動(dòng)化變量“$^”代表所有通過目錄搜索得到的依賴文件的完整路徑名(目
10、錄一般文件名)列表?!?@”代表規(guī)則的目標(biāo)。所以對(duì)于一個(gè)規(guī)則我們可以進(jìn)行如下的描述:foo.o:foo.cccc$(CFLAGS)$^o$@?使用偽目標(biāo)有兩點(diǎn)原因:1.避免在我們的Makefile中定義的只執(zhí)行命令的目標(biāo)(此目標(biāo)的目的為了執(zhí)行執(zhí)行一些列命令,而不需要?jiǎng)?chuàng)建這個(gè)目標(biāo))和工作目錄下的實(shí)際文件出現(xiàn)名字沖突。2.提高執(zhí)行make時(shí)的效率,特別是對(duì)于一個(gè)大型的工程來說,編譯的效率也許你同樣關(guān)心。如:在make的并行和遞歸執(zhí)行過程中。
11、此情況下一般會(huì)存在一個(gè)變量,定義為所有需要make的子目錄。對(duì)多個(gè)目錄進(jìn)行make的實(shí)現(xiàn)方式可以是:在一個(gè)規(guī)則的命令行中使用shell循環(huán)來完成。如下:SUBDIRS=foobarbazsubdirs:fdirin$(SUBDIRS)do$(MAKE)C$$dirdone但這種實(shí)現(xiàn)方法存在以下幾個(gè)問題:1.當(dāng)子目錄執(zhí)行make出現(xiàn)錯(cuò)誤時(shí),make不會(huì)退出。就是說,在對(duì)某一個(gè)目錄執(zhí)行make失敗以后,會(huì)繼續(xù)對(duì)其他的目錄進(jìn)行make。在最終
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 北信源網(wǎng)絡(luò)準(zhǔn)入控制系統(tǒng)用戶使用手冊(cè)v3.8
- google+中文用戶手冊(cè)v0.2
- hrbp工作學(xué)習(xí)手冊(cè)v2.0
- make mistakes,make progress
- STM32中文參考手冊(cè)_V10.pdf
- STM32中文參考手冊(cè)_V10.pdf
- pythonimaginglibrary中文手冊(cè)pil中文手冊(cè)python圖像處理
- opencv中文手冊(cè)
- winpcap中文手冊(cè)
- fltk中文手冊(cè)
- nasm中文手冊(cè)
- ssd中文手冊(cè)
- codesys編程中文手冊(cè)
- 布袋維護(hù)手冊(cè)中文
- 如家酒店銷售手冊(cè)(v)
- geoserver中文開發(fā)手冊(cè)
- opencv中文手冊(cè)doc
- freertos入門手冊(cè)_中文
- LICS_GNU_GPL.txt
- LICS_GNU_GPL.txt
評(píng)論
0/150
提交評(píng)論