1、用于生產(chǎn)目標(biāo)文件的自動(dòng)化執(zhí)行過(guò)程壶冒;基本過(guò)程是確定各源文件于目標(biāo)文件間的依賴關(guān)系:
? ? ? ?目標(biāo)文件:依賴的源文件列表
? ? ? ? ? ? ? ? ? ? 執(zhí)行的命令
? ? ? ? 基本例子:
? ? ? ? game: main.o a.o b.o
? ? ? ? ? ? ? ? ? ? cc -o game main.o a.o b.o
? ? ? ? main.o: main.h x.h z.h
? ? ? ? ? ? ? ? ? ? cc -c main.c
? ? ? ? a.o: a.h x.h y.h
? ? ? ? ? ? ? ? ? ? cc -c a.c?
????????b.o: b.h x.h y.h
????????????????????cc -c b.c
? ? ? ? 執(zhí)行命令行一定要用Tab進(jìn)行縮進(jìn)開(kāi)頭
2富俄、優(yōu)化make file
1)使用變量對(duì)源文件進(jìn)行優(yōu)化:(方便在一處即可維護(hù)源文件的變更)
? ? 如定義:objs = main.o a.o b.o 上例可優(yōu)化為:
game: $(objs)
????????cc -o game $(objs)
main.o: main.h x.h z.h
????????cc -c main.c
a.o: a.h x.h y.h
????????cc -c a.c
b.o: b.h x.h y.h
? ? ? ? ?cc -c b.c
? 2)make的自動(dòng)推導(dǎo)功能可以簡(jiǎn)化makefile的編寫(xiě):
只要make看到一個(gè)[.o]文件禁炒,它就會(huì)自動(dòng)推導(dǎo)把[.h]文件加在依賴關(guān)系中,也會(huì)自動(dòng)推導(dǎo)執(zhí)行命令cc -c [.c]
?3)深入優(yōu)化格式可為:
game: $(objs)
????????cc -o game $(objs)?
$(objs): x.h
main.o: z.h
a.o b.o: x.h y.h
4)通配符?~*
3霍比、好習(xí)慣:
.PHONY: clean? ? ? ? #“.PHONY”表示幕袱,clean是個(gè)偽目標(biāo)文件
clean:
? ? ? ? rm game $(objs)
4、.PHONY用于跳過(guò)隱含規(guī)則搜索改善makefile的執(zhí)行性能悠瞬;也用于解決不產(chǎn)生實(shí)際目標(biāo)文件虛lable的問(wèn)題:如clean,并不是一個(gè)實(shí)際要生產(chǎn)的目標(biāo)文件们豌,在該目錄下如果存在一個(gè)clean的文件,沒(méi)有.phony指定則該目標(biāo)就永遠(yuǎn)不執(zhí)行的問(wèn)題浅妆。