版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年攀枝花市米易縣事業(yè)單位引才筆試真題
- 2023年常州市第七人民醫(yī)院招聘考試試題及答案
- 2024年江蘇客運(yùn)員初級(jí)理論知識(shí)試卷題庫(kù)
- 2024年貴州客運(yùn)從業(yè)資格考
- 無(wú)添加食品科技行業(yè)的消費(fèi)心理分析
- 2024年河池客運(yùn)從業(yè)資格證2024年考試題
- 2024年湖北客運(yùn)資格證考試試題模擬軟件
- 2024年江蘇道路運(yùn)輸客運(yùn)從業(yè)資格證考試題庫(kù)答案
- 人力資源數(shù)字化轉(zhuǎn)型行業(yè)的消費(fèi)市場(chǎng)分析
- 醫(yī)療影像人工智能行業(yè)發(fā)展預(yù)測(cè)分析
- 維生素-維生素的發(fā)現(xiàn)(食品營(yíng)養(yǎng)與配餐課件)
- 農(nóng)田水利小型泵站設(shè)計(jì)
- 視頻監(jiān)控系統(tǒng)試運(yùn)行記錄
- 工程建設(shè)項(xiàng)目招投標(biāo)異議書(shū)(參考格式)【模板】
- 術(shù)中獲得性壓力性損傷預(yù)防
- 2023年計(jì)算機(jī)技能高考萬(wàn)維系統(tǒng)新增題匯總-下部分(700題)
- 江蘇高職單招試卷真題2022年
- 胸痛中心網(wǎng)絡(luò)醫(yī)院STEMI患者繞行急診和CCU方案流程圖
- 初中英語(yǔ)課堂教學(xué)中小組合作學(xué)習(xí)的實(shí)踐研究的開(kāi)題報(bào)告
- 糧食和物資儲(chǔ)備現(xiàn)場(chǎng)檢查清單
- 二年級(jí)上冊(cè)數(shù)學(xué)教學(xué)設(shè)計(jì)- 第一單元 蘇教版
評(píng)論
0/150
提交評(píng)論