您好,登錄后才能下訂單哦!
本系列(makefile)文章,從零基礎(chǔ)開(kāi)始,通過(guò)實(shí)驗(yàn)逐步分析makefile的語(yǔ)法特性,并最終打造一個(gè)可復(fù)用、可移植的專(zhuān)業(yè)編譯環(huán)境。
參考:
1.DT 唐老師門(mén)徒計(jì)劃課程
2.GNU make 手冊(cè):http://www.gnu.org/software/make/manual/make.html
hello: // 目標(biāo)
echo “hello makefile” // 實(shí)現(xiàn)目標(biāo)要執(zhí)行的命令,注意行首是一個(gè)table(\t)
make -f mf.txt hello // -f表示指定mf.txt文件為規(guī)則定義文件(Makefile),并執(zhí)行文件里的hello目標(biāo)
make // 執(zhí)行默認(rèn)規(guī)則定義文件(Makefile/makefile)中的默認(rèn)目標(biāo)(第一個(gè)目標(biāo))
Makefile 用于定義源文件和依賴(lài)關(guān)系,說(shuō)明如何編譯各個(gè)源文件并生成可執(zhí)行文件
依賴(lài)的定義:
targets:prerequests; command1
Command2
targets // 通常是需要生成的目標(biāo)文件名,make所需要執(zhí)行的命令名稱(chēng)
prerequisite // 當(dāng)前目標(biāo)所依賴(lài)的其他目標(biāo)或文件
command // 完成目標(biāo)所需要的命令
當(dāng)目標(biāo)對(duì)應(yīng)的文件不存在,執(zhí)行對(duì)應(yīng)命令
當(dāng)依賴(lài)在時(shí)間上比目標(biāo)更新,執(zhí)行對(duì)應(yīng)命令
當(dāng)依賴(lài)關(guān)系發(fā)生時(shí),對(duì)比依賴(lài)鏈上每一個(gè)目標(biāo)
hello.out all : func.o main.o
gcc -o hello.out func.o main.o
func.o : func.c
gcc -o func.o -c func.c
main.o : main.c
gcc -o main.o -c main.c
默認(rèn)情況下,make認(rèn)為目標(biāo)對(duì)應(yīng)著一個(gè)文件,make會(huì)比較文件和依賴(lài)關(guān)系的新舊關(guān)系,決定執(zhí)行是否執(zhí)行命令,make以文件處理作為第一優(yōu)先級(jí)。
所以當(dāng)出現(xiàn)和目標(biāo)同名的文件時(shí),則在文件不被更新的前提下,目標(biāo)不會(huì)被執(zhí)行
通過(guò)PHONY關(guān)鍵字聲明一個(gè)偽目標(biāo),偽目標(biāo)不對(duì)應(yīng)任何實(shí)際的文件,不管偽目標(biāo)的依賴(lài)時(shí)否更新,命令總是執(zhí)行。
偽目標(biāo)的語(yǔ)法:先聲明,后使用
本質(zhì):偽目標(biāo)是make中特殊的目標(biāo):.PHONY的依賴(lài)
.PHONY : clean
clean :
rm *.o hello.out -rf
規(guī)則調(diào)用,模擬C語(yǔ)言函數(shù)的概念。
原理:當(dāng)一個(gè)目標(biāo)的依賴(lài)包含偽目標(biāo)時(shí),偽目標(biāo)所定義的命令總是會(huì)被執(zhí)行。
.PHONY : rebuild clean all
rebuild : clean all
all : hello.out
clean :
rm *.o hello.out -rf
原理:如果一個(gè)規(guī)則沒(méi)有命令或者依賴(lài),并且他的目標(biāo)不是一個(gè)存在的文件名,在執(zhí)行此規(guī)則是,目標(biāo)總會(huì)被認(rèn)為是最新的。
clean : FORCE
rm *.o hello.out -rf
FORCE :
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。