Makefile的目標(biāo)
Makefile為什么需要偽目標(biāo)
這里的目標(biāo)是指makefile文件中的目標(biāo),不是Makefile的歷史使命
Makefile中的目標(biāo)到底是什么呢,make命令是怎么樣理解目標(biāo)呢
1.make將makefile的目標(biāo)認(rèn)為是一個(gè)文件;
2.make解釋器比較目標(biāo)文件和依賴文件的新舊關(guān)系,決定是否執(zhí)行命令
為里理解Makeifle的目標(biāo)來做以下測(cè)試
編寫一個(gè)Makefile
在同一個(gè)目錄下新建一個(gè)test文件
Makefile文件內(nèi)容如下:
test:
echo test
此時(shí)執(zhí)行make會(huì)出現(xiàn)什么情況,一定會(huì)有人會(huì)認(rèn)為會(huì)執(zhí)行echo test語句
實(shí)際情況是下面的結(jié)果
string@asus:~/Projects/makefile$ make
make: 'test' is up to date.
為什么是上面的情況呢,別忘了在目錄下新建了一個(gè)test文件,這個(gè)文件是出現(xiàn)這個(gè)情況的罪魁禍?zhǔn)祝驗(yàn)閙ake將目標(biāo)認(rèn)為是一個(gè)文件,所以執(zhí)行make的時(shí)候會(huì)去尋找該文件,如果該文件存在則不會(huì)執(zhí)行相應(yīng)的語句
如果刪除該test文件則會(huì)按照預(yù)期的目標(biāo)執(zhí)行
如果一個(gè)目標(biāo)不去檢測(cè),一定要執(zhí)行該怎么辦,Makefile提供了一個(gè)很好的辦法,在大多數(shù)的Makefile中也有這個(gè)辦法的例子,那就是Makefile的偽目標(biāo)的,將一個(gè)目標(biāo)設(shè)計(jì)偽目標(biāo)的時(shí)候不管如何都會(huì)去執(zhí)行目標(biāo)下的命令
在該例子中添加如下語句則會(huì)按照預(yù)期的結(jié)果執(zhí)行
.PHONY : test
是不是很熟悉,這個(gè)就是在大多數(shù)Makefile中clean的處理方法,這大概就是偽目標(biāo)的由來原因吧