![LinuxC編程基礎(chǔ)--mak.ppt_第1頁(yè)](http://file.renrendoc.com/FileRoot1/2019-1/15/91ee6a25-1f86-43fb-85d2-3bba38e491d7/91ee6a25-1f86-43fb-85d2-3bba38e491d71.gif)
![LinuxC編程基礎(chǔ)--mak.ppt_第2頁(yè)](http://file.renrendoc.com/FileRoot1/2019-1/15/91ee6a25-1f86-43fb-85d2-3bba38e491d7/91ee6a25-1f86-43fb-85d2-3bba38e491d72.gif)
![LinuxC編程基礎(chǔ)--mak.ppt_第3頁(yè)](http://file.renrendoc.com/FileRoot1/2019-1/15/91ee6a25-1f86-43fb-85d2-3bba38e491d7/91ee6a25-1f86-43fb-85d2-3bba38e491d73.gif)
![LinuxC編程基礎(chǔ)--mak.ppt_第4頁(yè)](http://file.renrendoc.com/FileRoot1/2019-1/15/91ee6a25-1f86-43fb-85d2-3bba38e491d7/91ee6a25-1f86-43fb-85d2-3bba38e491d74.gif)
![LinuxC編程基礎(chǔ)--mak.ppt_第5頁(yè)](http://file.renrendoc.com/FileRoot1/2019-1/15/91ee6a25-1f86-43fb-85d2-3bba38e491d7/91ee6a25-1f86-43fb-85d2-3bba38e491d75.gif)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章 Linux C編程基礎(chǔ)-make,GNU make管理項(xiàng)目,為什么要使用make? 工作量問(wèn)題:對(duì)于擁有多個(gè)(上百個(gè))源文件的軟件項(xiàng)目,只需編寫(xiě)一次編譯過(guò)程,而不需要在每次源文件修改后重復(fù)輸入眾多的文件名和編譯命令進(jìn)行編譯; 效率問(wèn)題:make能夠根據(jù)文件的時(shí)間戳自動(dòng)發(fā)現(xiàn)更新過(guò)的源文件,并通過(guò)讀入Makefile文件來(lái)對(duì)更新的源文件進(jìn)行編譯而對(duì)其它文件只進(jìn)行鏈接操作。,2,makefile,makefile的格式: 目標(biāo):欲生成的目標(biāo)文件,通常是目標(biāo)文件或可執(zhí)行文件; 依賴(lài)項(xiàng):生成目標(biāo)需要的文件,多個(gè)文件以空格隔開(kāi)。 命令:創(chuàng)建每個(gè)目標(biāo)體時(shí)需要運(yùn)行的命令??墒褂美m(xù)行號(hào)()將一個(gè)單獨(dú)的命令行延續(xù)成幾行。 Makefile是make讀入的唯一配置文件,其中包含的規(guī)則指明編譯哪些文件以及怎樣編譯這些文件。,目標(biāo):依賴(lài)項(xiàng)列表 (Tab縮進(jìn))命令,makefile,Makefile示例,Makefile里有什么?,1、 顯式規(guī)則。 顯式規(guī)則說(shuō)明了,如何生成一個(gè)或多的的目標(biāo)文件。 這是由Makefile的書(shū)寫(xiě)者明顯指出,要生成的文件,文件的依賴(lài)文件,生成的命令。 2、隱式規(guī)則。由于我們的make有自動(dòng)推導(dǎo)的功能,所以隱晦的規(guī)則可以讓我們比較粗糙地簡(jiǎn)略地書(shū)寫(xiě)Makefile,這是由make所支持的。 3、 變量的定義。 在Makefile中我們要定義一系列的變量,變量一般都是字符串,這個(gè)有點(diǎn)你C語(yǔ)言中的宏,當(dāng)Makefile被執(zhí)行時(shí),其中的變量都會(huì)被擴(kuò)展到相應(yīng)的引用位置上。 4、 文件指示。 其包括了三個(gè)部分,一個(gè)是在一個(gè)Makefile中引用另一個(gè)Makefile,就像C語(yǔ)言中的include一樣;另一個(gè)是指根據(jù)某些情況指定Makefile中的有效部分,就像C中的預(yù)編譯#if一樣;還有就是定義一個(gè)多行的命令。 5、 注釋。 Makefile中只有行注釋?zhuān)渥⑨屖怯谩?”字符。,make命令,make工具的使用格式: make 命令選項(xiàng) 命令參數(shù) 通常使用make就可以了,make會(huì)按序查找名為GNUmakefile、Makefile和makefile作為編譯指導(dǎo)文件;建議使用Makefile。 在make命令后面鍵入目標(biāo)名即可建立指定的目標(biāo);如果不跟目標(biāo)名則建立Makefile中定義的第一個(gè)目標(biāo)。 make -f file 讀入當(dāng)前目錄下的file文件作為Makefile;,Make工作原理,make做的工作: 在執(zhí)行g(shù)cc時(shí)會(huì)先檢查依賴(lài)文件是否存在: 若不存在就先執(zhí)行別的規(guī)則以生成缺少的依賴(lài)文件,最后生成相關(guān)的目標(biāo)文件。 如果存在,并不急于執(zhí)行g(shù)cc,而是先比較依賴(lài)文件與其對(duì)應(yīng)源文件的時(shí)間戳。如果源文件較新的話,就會(huì)執(zhí)行相應(yīng)的規(guī)則來(lái)重新生成依賴(lài)文件和目標(biāo)文件。否則就不會(huì)執(zhí)行相應(yīng)的gcc。,Make工作原理,1)如果工程沒(méi)有編譯過(guò),那么所有C文件都要編譯并被鏈接。 2)如果這個(gè)工程的某幾個(gè)C文件被修改,那么只編譯被修改的C文件,并鏈接目標(biāo)程序。 3)如果這個(gè)工程的頭文件被改變了,那么需要編譯引用了這幾個(gè)頭文件的C文件,并鏈接目標(biāo)程序。,目標(biāo)的依賴(lài)關(guān)系,Makefile中的變量,變量的主要作用如下: 保存文件名列表:作為依賴(lài)文件的一些目標(biāo)文件名出現(xiàn)在可執(zhí)行文件的規(guī)則中,而在這個(gè)規(guī)則的命令行里同樣包含這些文件并傳遞給gcc做為命令參數(shù)。如果使用一個(gè)變量來(lái)保存所有的目標(biāo)文件名,則可以方便地加入新的目標(biāo)文件而且不易出錯(cuò)。 保存可執(zhí)行命令名:如果項(xiàng)目被用在一個(gè)非gcc的系統(tǒng)里,則必須將所有出現(xiàn)編譯器名的地方改成用新的編譯器名。但是如果使用一個(gè)變量來(lái)代替編譯器名,那么只需要改變?cè)撟兞康闹怠?保存編譯器的參數(shù):在很多源代碼編譯時(shí),gcc需要很長(zhǎng)的參數(shù)選項(xiàng),在很多情況下,所有的編譯命令使用一組相同的選項(xiàng),如果把這組選項(xiàng)使用一個(gè)變量代表,那么可以把這個(gè)變量放在所有引用編譯器的地方。當(dāng)要改變選項(xiàng)的時(shí)候,只需改變一次這個(gè)變量的內(nèi)容即可。,變量的定義和使用,Makefile中的變量是用一個(gè)文本串在Makefile中定義的,這個(gè)文本串就是變量的值。只要在一行的開(kāi)始寫(xiě)下這個(gè)變量的名字,后面跟一個(gè)“”號(hào),以及要設(shè)定這個(gè)變量的值即可定義變量,下面是定義變量的語(yǔ)法: VARNAME=string 使用時(shí),把變量用括號(hào)括起來(lái),并在前面加上$符號(hào),就可以引用變量的值: $VARNAME 變量一般都在Makefile的頭部定義。按照慣例,所有的Makefile變量都應(yīng)該是大寫(xiě)。如果變量的值發(fā)生變化,就只需要在一個(gè)地方修改,從而簡(jiǎn)化了Makefile的維護(hù)。,變量的其他定義方法:,x := foo y := $(x) bar,FOO ?= bar,+=:追加變量值,make命令,Makefile中變量的使用,變量的定義: OBJS = val,新Makefile文件內(nèi)容: OBJS = main.o hello.o CC = gcc -Wall -c main: $(OBJS) gcc $(OBJS) -o main main.o: main.c $(CC) main.c -o main.o hello.o: hello.c hello.h $(CC) hello.c -o hello.o,變量的使用: $(OBJS),Makefile文件內(nèi)容: main: main.o hello.o gcc main.o hello.o -o main main.o: main.c gcc -Wall -c main.c -o main.o hello.o: hello.c hello.h gcc -Wall -c hello.c -o hello.o,14,Makefile中常見(jiàn)自動(dòng)變量,$* 不包含擴(kuò)展名的目標(biāo)文件名稱(chēng) $+ 所有的依賴(lài)文件,以空格分開(kāi),并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴(lài)文件 $ 第一個(gè)依賴(lài)文件的名稱(chēng) $? 所有時(shí)間戳比目標(biāo)文件晚的依賴(lài)文件,并 以空格分開(kāi) $ 目標(biāo)文件的完整名稱(chēng) $ 所有不重復(fù)的依賴(lài)文件,以空格分開(kāi),make命令,Makefile中常見(jiàn)的自動(dòng)變量,Makefile文件內(nèi)容: OBJS = main.o hello.o CC = gcc -Wall -c main: $(OBJS) gcc $(OBJS) -o main main.o: main.c $(CC) main.c -o main.o hello.o: hello.c hello.h $(CC) hello.c -o hello.o,新Makefile文件內(nèi)容: OBJS = main.o hello.o CC = gcc -Wall -c main: $(OBJS) gcc $ -o $ main.o: main.c $(CC) $ -o $ hello.o: hello.c hello.h $(CC) $ -o $,16,Makefile中常見(jiàn)預(yù)定義變量,AR 歸檔維護(hù)程序的名稱(chēng),默認(rèn)值為ar AS 匯編程序的名稱(chēng),默認(rèn)值為as CC C編譯器的名稱(chēng),默認(rèn)值為cc CPP C預(yù)編譯器的名稱(chēng),默認(rèn)值為$(CC) E RM 文件刪除程序的名稱(chēng),默認(rèn)值為rm f ARFLAGS 庫(kù)文件維護(hù)程序的選項(xiàng),無(wú)默認(rèn)值 ASFLAGS 傳給匯編程序的標(biāo)志,無(wú)默認(rèn)值 CFLAGS C編譯器的選項(xiàng),無(wú)默認(rèn)值 CPPFLAGS C預(yù)編譯的選項(xiàng),無(wú)默認(rèn)值,Makefile規(guī)則,1、隱式規(guī)則 隱式規(guī)則定義了將一個(gè)具有某個(gè)后綴的文件(例如,.c 文件)轉(zhuǎn)換為具有另外一種后綴的文件(例如,.o 文件)的方法。每個(gè)后綴規(guī)則以?xún)蓚€(gè)成對(duì)出現(xiàn)的后綴名定義。 注意:在隱式規(guī)則只能查找到相同文件名的不同后綴名文件,如”file.o”文件必須由”file.c”文件生成。,例:,main: main.o hello.o gcc main.o hello.o -o main,main: main.o hello.o gcc main.o hello.o -o main main.o: main.c hello.h gcc -Wall -c main.c -o main.o hello.o: hello.c hello.h gcc -Wall -c hello.c -o hello.o,Makefile規(guī)則,2、模式規(guī)則 模式規(guī)則是用來(lái)定義相同處理規(guī)則的多個(gè)文件的。 隱式規(guī)則僅僅能夠用make默認(rèn)的變量來(lái)進(jìn)行操作,而模式規(guī)則還能引入用戶(hù)自定義變量,為多個(gè)文件建立相同的規(guī)則,從而簡(jiǎn)化Makefile的編寫(xiě)。 模式規(guī)則的格式類(lèi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 別墅維修合同范本
- 保安崗位補(bǔ)充合同范本
- 出售轉(zhuǎn)讓磨煤機(jī)合同范本
- 全屋定制柜書(shū)面合同范本
- 2025年度農(nóng)業(yè)保險(xiǎn)賠付借款合同
- 勞動(dòng)合同范例帶封面
- 共同買(mǎi)車(chē)合同范本
- 三萬(wàn)塊錢(qián)二手車(chē)合同范本
- 倉(cāng)庫(kù)代管理服務(wù)合同范例
- 勞動(dòng)簡(jiǎn)易合同范例
- 2023年《植物保護(hù)》專(zhuān)業(yè)考試題庫(kù)
- 基層醫(yī)療機(jī)構(gòu)基本情況調(diào)查報(bào)告
- 華晨寶馬汽車(chē)4S店?duì)I銷(xiāo)策略畢業(yè)論文
- 你畫(huà)我猜題目大全
- 人教版二年級(jí)數(shù)學(xué)下冊(cè)啟迪全優(yōu)卷第八、九單元測(cè)試卷(有答案)
- 幼兒園PPT課件《歡樂(lè)的元宵節(jié)》
- 住院患者發(fā)生管路非計(jì)劃性拔管應(yīng)急預(yù)案及處理流程應(yīng)急預(yù)案
- 電解槽檢修施工方案
- 正常分娩 分娩機(jī)制 助產(chǎn)學(xué)課件
- 讀書(shū)分享-精力管理課件
- 新上崗干部的90天轉(zhuǎn)身計(jì)劃課件
評(píng)論
0/150
提交評(píng)論