makefile入門(mén)-教學(xué)講解課件_第1頁(yè)
makefile入門(mén)-教學(xué)講解課件_第2頁(yè)
makefile入門(mén)-教學(xué)講解課件_第3頁(yè)
makefile入門(mén)-教學(xué)講解課件_第4頁(yè)
makefile入門(mén)-教學(xué)講解課件_第5頁(yè)
已閱讀5頁(yè),還剩18頁(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)介

MAKEFILE入門(mén)提綱什么是makefile分析一個(gè)簡(jiǎn)單的makefileMakefile中經(jīng)常用到的知識(shí)我們常用的makefile是如何組成的什么是makefile

程序的基本編譯過(guò)程

makefile的作用分析一個(gè)簡(jiǎn)單的makefileMakefile中經(jīng)常用到的知識(shí)我們常用的makefile是如何組成的程序的基本編譯過(guò)程基本編譯過(guò)程:源文件→目標(biāo)文件(.o)→鏈接成一個(gè)可執(zhí)行程序(elf)在linux下的實(shí)現(xiàn):1、編寫(xiě)源文件2、使用g++來(lái)進(jìn)行編譯:

a)如果只有一個(gè)文件(c/cpp文件),直接可以編譯:

g++helloworld.cpp-ohelloworld b)如果需要多個(gè)文件鏈接,則先編譯成.o文件,再進(jìn)行鏈接

g++-ca.cpp-oa.og++-cb.cpp-ob.o g++a.o

b.o-oexefile每次編譯都要敲那么多命令,很麻煩,所以將這些命令寫(xiě)到makefile里。Make命令會(huì)去讀makefile,然后自動(dòng)去執(zhí)行所有的編譯過(guò)程,并將結(jié)果返回。在大型的項(xiàng)目中,源文件的組成是很復(fù)雜的,所以需要makefile來(lái)多整個(gè)項(xiàng)目進(jìn)行編譯。Linux有各種各樣的發(fā)行版本,有些庫(kù)并不通用,所以會(huì)使用automake的一系列工具來(lái)檢查當(dāng)前的系統(tǒng)是否可以對(duì)該項(xiàng)目進(jìn)行編譯。Makefile的作用什么是makefile分析一個(gè)簡(jiǎn)單的makefile

makefile的基本結(jié)構(gòu)

helloworld的makefileMakefile中經(jīng)常用到的知識(shí)我們常用的makefile是如何組成的target:prerequisites commandTarget通常稱作目標(biāo)。它是一個(gè)目標(biāo)文件,可以是ObjectFile,也可以是執(zhí)行文件。還可以是一個(gè)標(biāo)簽(Label)。Prerequisites通常稱作依賴。就是要生成那個(gè)target所依賴的文件或是目標(biāo)。command也就是make需要執(zhí)行的命令。(任意的Shell命令,前面一定是一個(gè)tab鍵)Makefile的基本結(jié)構(gòu)target:prerequisites command這是一個(gè)文件的依賴關(guān)系,也就是說(shuō),target這一個(gè)或多個(gè)的目標(biāo)文件依賴于prerequisites中的文件,其生成規(guī)則定義在command中。說(shuō)白一點(diǎn)就是:prerequisites中如果有文件比target文件要新的話,command所定義的命令就會(huì)被執(zhí)行。這就是Makefile的規(guī)則。也就是Makefile中最核心的內(nèi)容。Makefile的基本結(jié)構(gòu)target:prerequisites command注意:Command前是一個(gè)tab鍵helloworld:hello.cpp g++hello.cpp-ohellowdhelloworld的makefile什么是makefile分析一個(gè)簡(jiǎn)單的makefileMakefile中經(jīng)常用到的知識(shí)容易忽略的問(wèn)題偽目標(biāo)隱式規(guī)則我們常用的makefile是如何組成的包含庫(kù)的時(shí)候要去掉lib前綴。如要包含libcomm,則需要這樣來(lái)寫(xiě):-L$(PATH)/lib–lcomm如果是只編譯不鏈接,請(qǐng)注意要加參數(shù)-c

target...:prerequisites... command

中的command可以是任意的shell命令。但在Makefile中的命令,必須要以[Tab]鍵開(kāi)始。在編寫(xiě)makefile中請(qǐng)記住環(huán)境變量的存在。可以使用env命令來(lái)顯示當(dāng)前環(huán)境變量的值。容易忽略的問(wèn)題經(jīng)常見(jiàn)到的makeclean其實(shí)是通過(guò)makefile中的一個(gè)clean目標(biāo)實(shí)現(xiàn)的。但如果源文件中有一個(gè)clean的代碼文件,就一定會(huì)真存在一個(gè)clean目標(biāo),這樣就和清除命令混在一起了。為了避免和文件重名的這種情況,我們可以使用一個(gè)特殊的標(biāo)記“.PHONY”來(lái)顯示地指明一個(gè)目標(biāo)是“偽目標(biāo)”,向make說(shuō)明,不管是否有這個(gè)文件,這個(gè)目標(biāo)就是“偽目標(biāo)”。如:.PHONY:cleanclean:

rm*.otemp

偽目標(biāo)看如下的一個(gè)編譯規(guī)則:%.o:%.c$(CC)-c$(CFLAGS)$(CPPFLAGS)$<-o$@%.o(目標(biāo),target)

:%.c(依賴,prerequisites

)是表示把所有的[.c]文件都編譯成[.o]文件;$<

是每次匹配到的那個(gè)依賴文件$@是每次匹配到的那個(gè)目標(biāo)文件隱式規(guī)則什么是makefile分析一個(gè)簡(jiǎn)單的makefileMakefile中經(jīng)常用到的知識(shí)我們常用的makefile是如何組成的

m:通用庫(kù)調(diào)用路徑

makefile:編譯使用的文件“-I”

:定義了你自己的頭文件的存儲(chǔ)目錄?!?L”:定義了你自己的庫(kù)文件存放目錄。Make中可以定義變量,直接賦值就可以了:

ARPS_ROOT=/home/yedeng/arps引用變量使用$(APRS_ROOT),make會(huì)自動(dòng)進(jìn)行替換。將$(APRS_ROOT)用“/home/yedeng/arps”來(lái)代替。實(shí)際看我們用的一個(gè)m:打開(kāi)文件m:通用庫(kù)調(diào)用路徑在Makefile使用include關(guān)鍵字可以把別的Makefile包含進(jìn)來(lái),這很像C語(yǔ)言的#include,被包含的文件會(huì)原模原樣的放在當(dāng)前文件的包含位置。Makefile中還可以使用一些函數(shù):$(patsubst

<pattern>,<replacement>,<text>):模式字符串替換函數(shù)。功能:查找<text>中的單詞是否符合模式<pattern>,如果匹配的話,則以<replacement>替換。

$(wildcardPATTERN...):保持通配符有效。 功能:在規(guī)則中,通配符會(huì)被自動(dòng)展開(kāi)。但在變量的定義和函數(shù)引用時(shí),通配符將失效。這種情況下如果需要通配符有效,就需要使用函數(shù)“wildcard”。makefile:編譯使用的文件一:=和=的區(qū)別:AAA=abcd

BBB=$(AAA)

CCC:=$(AAA)

AAA=cdef

此時(shí),(BBB)為cdef

(跟隨AAA變化)。$(CCC)

為abcd(不隨AAA變化)。

在Makefile還可以使用shell命令:

CurrDir:=$(shellbasename`pwd`)分析我們現(xiàn)在使用的一個(gè)makefile:打開(kāi)文件makefile:編譯使用的文件二提綱什么是makefile分析一個(gè)簡(jiǎn)單的makefileMakefile中經(jīng)常用到的知識(shí)我們常用的makefile是如何組成的什么是makefile

程序的基本編譯過(guò)程

makefile的作用分析一個(gè)簡(jiǎn)單的makefileMakefile中經(jīng)常用到的知識(shí)我們常用的makefile是如何組成的什么是makefile分析一個(gè)簡(jiǎn)單的makefile

makefile的基本結(jié)構(gòu)

helloworld的makefileMakefile中經(jīng)常用到的知識(shí)我們常用的makefile是如何組成的什么是makefile分析一個(gè)簡(jiǎn)單的

溫馨提示

  • 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論