




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
MAKEFILE入門提綱什么是makefile分析一個簡單的makefileMakefile中經(jīng)常用到的知識我們常用的makefile是如何組成的什么是makefile
程序的基本編譯過程
makefile的作用分析一個簡單的makefileMakefile中經(jīng)常用到的知識我們常用的makefile是如何組成的程序的基本編譯過程基本編譯過程:源文件→目標(biāo)文件(.o)→鏈接成一個可執(zhí)行程序(elf)在linux下的實現(xiàn):1、編寫源文件2、使用g++來進(jìn)行編譯:
a)如果只有一個文件(c/cpp文件),直接可以編譯:
g++helloworld.cpp-ohelloworld b)如果需要多個文件鏈接,則先編譯成.o文件,再進(jìn)行鏈接
g++-ca.cpp-oa.og++-cb.cpp-ob.o g++a.o
b.o-oexefile每次編譯都要敲那么多命令,很麻煩,所以將這些命令寫到makefile里。Make命令會去讀makefile,然后自動去執(zhí)行所有的編譯過程,并將結(jié)果返回。在大型的項目中,源文件的組成是很復(fù)雜的,所以需要makefile來多整個項目進(jìn)行編譯。Linux有各種各樣的發(fā)行版本,有些庫并不通用,所以會使用automake的一系列工具來檢查當(dāng)前的系統(tǒng)是否可以對該項目進(jìn)行編譯。Makefile的作用什么是makefile分析一個簡單的makefile
makefile的基本結(jié)構(gòu)
helloworld的makefileMakefile中經(jīng)常用到的知識我們常用的makefile是如何組成的target:prerequisites commandTarget通常稱作目標(biāo)。它是一個目標(biāo)文件,可以是ObjectFile,也可以是執(zhí)行文件。還可以是一個標(biāo)簽(Label)。Prerequisites通常稱作依賴。就是要生成那個target所依賴的文件或是目標(biāo)。command也就是make需要執(zhí)行的命令。(任意的Shell命令,前面一定是一個tab鍵)Makefile的基本結(jié)構(gòu)target:prerequisites command這是一個文件的依賴關(guān)系,也就是說,target這一個或多個的目標(biāo)文件依賴于prerequisites中的文件,其生成規(guī)則定義在command中。說白一點(diǎn)就是:prerequisites中如果有文件比target文件要新的話,command所定義的命令就會被執(zhí)行。這就是Makefile的規(guī)則。也就是Makefile中最核心的內(nèi)容。Makefile的基本結(jié)構(gòu)target:prerequisites command注意:Command前是一個tab鍵helloworld:hello.cpp g++hello.cpp-ohellowdhelloworld的makefile什么是makefile分析一個簡單的makefileMakefile中經(jīng)常用到的知識容易忽略的問題偽目標(biāo)隱式規(guī)則我們常用的makefile是如何組成的包含庫的時候要去掉lib前綴。如要包含libcomm,則需要這樣來寫:-L$(PATH)/lib–lcomm如果是只編譯不鏈接,請注意要加參數(shù)-c
target...:prerequisites... command
中的command可以是任意的shell命令。但在Makefile中的命令,必須要以[Tab]鍵開始。在編寫makefile中請記住環(huán)境變量的存在??梢允褂胑nv命令來顯示當(dāng)前環(huán)境變量的值。容易忽略的問題經(jīng)常見到的makeclean其實是通過makefile中的一個clean目標(biāo)實現(xiàn)的。但如果源文件中有一個clean的代碼文件,就一定會真存在一個clean目標(biāo),這樣就和清除命令混在一起了。為了避免和文件重名的這種情況,我們可以使用一個特殊的標(biāo)記“.PHONY”來顯示地指明一個目標(biāo)是“偽目標(biāo)”,向make說明,不管是否有這個文件,這個目標(biāo)就是“偽目標(biāo)”。如:.PHONY:cleanclean:
rm*.otemp
偽目標(biāo)看如下的一個編譯規(guī)則:%.o:%.c$(CC)-c$(CFLAGS)$(CPPFLAGS)$<-o$@%.o(目標(biāo),target)
:%.c(依賴,prerequisites
)是表示把所有的[.c]文件都編譯成[.o]文件;$<
是每次匹配到的那個依賴文件$@是每次匹配到的那個目標(biāo)文件隱式規(guī)則什么是makefile分析一個簡單的makefileMakefile中經(jīng)常用到的知識我們常用的makefile是如何組成的
m:通用庫調(diào)用路徑
makefile:編譯使用的文件“-I”
:定義了你自己的頭文件的存儲目錄?!?L”:定義了你自己的庫文件存放目錄。Make中可以定義變量,直接賦值就可以了:
ARPS_ROOT=/home/yedeng/arps引用變量使用$(APRS_ROOT),make會自動進(jìn)行替換。將$(APRS_ROOT)用“/home/yedeng/arps”來代替。實際看我們用的一個m:打開文件m:通用庫調(diào)用路徑在Makefile使用include關(guān)鍵字可以把別的Makefile包含進(jìn)來,這很像C語言的#include,被包含的文件會原模原樣的放在當(dāng)前文件的包含位置。Makefile中還可以使用一些函數(shù):$(patsubst
<pattern>,<replacement>,<text>):模式字符串替換函數(shù)。功能:查找<text>中的單詞是否符合模式<pattern>,如果匹配的話,則以<replacement>替換。
$(wildcardPATTERN...):保持通配符有效。 功能:在規(guī)則中,通配符會被自動展開。但在變量的定義和函數(shù)引用時,通配符將失效。這種情況下如果需要通配符有效,就需要使用函數(shù)“wildcard”。makefile:編譯使用的文件一:=和=的區(qū)別:AAA=abcd
BBB=$(AAA)
CCC:=$(AAA)
AAA=cdef
此時,(BBB)為cdef
(跟隨AAA變化)。$(CCC)
為abcd(不隨AAA變化)。
在Makefile還可以使用shell命令:
CurrDir:=$(shellbasename`pwd`)分析我們現(xiàn)在使用的一個makefile:打開文件makefile:編譯使用的文件二提綱什么是makefile分析一個簡單的makefileMakefile中經(jīng)常用到的知識我們常用的makefile是如何組成的什么是makefile
程序的基本編譯過程
makefile的作用分析一個簡單的makefileMakefile中經(jīng)常用到的知識我們常用的makefile是如何組成的什么是makefile分析一個簡單的makefile
makefile的基本結(jié)構(gòu)
helloworld的makefileMakefile中經(jīng)常用到的知識我們常用的makefile是如何組成的什么是makefile分析一個簡單的
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國絕緣制品市場十三五規(guī)劃與投資戰(zhàn)略研究報告
- 2025-2030年中國紅木市場競爭格局及發(fā)展趨勢分析報告
- 2025-2030年中國精密減速器市場發(fā)展現(xiàn)狀及前景趨勢分析報告
- 2025-2030年中國碲行業(yè)運(yùn)行狀況及發(fā)展趨勢分析報告
- 2025年遼寧省安全員C證考試(專職安全員)題庫附答案
- 2025-2030年中國皮帶輸送機(jī)市場運(yùn)行狀況及發(fā)展前景分析報告
- 2025-2030年中國電解銅行業(yè)發(fā)展?jié)摿σ?guī)劃研究報告
- 重慶郵電大學(xué)《電腦輔助設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 成都信息工程大學(xué)《藝用人體解剖學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 泰山學(xué)院《財政政策與貨幣政策》2023-2024學(xué)年第二學(xué)期期末試卷
- 義務(wù)教育物理課程標(biāo)準(zhǔn)(2022年版word版)
- 研學(xué)旅行概論教學(xué)課件匯總完整版電子教案
- 12月腹痛護(hù)理常規(guī)
- 控股集團(tuán)公司組織架構(gòu)圖.docx
- 高爐煤氣安全知識的培訓(xùn)
- 2008 年全國高校俄語專業(yè)四級水平測試試卷
- 需求供給與均衡價格PPT課件
- 最常用2000個英語單詞_(全部標(biāo)有注釋)字母排序
- 在銀行大零售業(yè)務(wù)工作會議上的講話講解學(xué)習(xí)
- 古代傳說中的藝術(shù)形象-
- 水電站大壩土建安裝工程懸臂模板施工手冊
評論
0/150
提交評論