makefile之伪目标(6)
偽目標(biāo)是這樣一個目標(biāo):它不代表一個真正的文件名,在執(zhí)行make時可以指定這個目標(biāo)來執(zhí)行其所在規(guī)則定義的命令,有時我們也可以將一個偽目標(biāo)稱為標(biāo)簽。使用偽目標(biāo)有兩點(diǎn)原因:1.?避免在我們的Makefile中定義的只執(zhí)行命令的的目標(biāo)(此目標(biāo)的目的為了執(zhí)行執(zhí)行一系列命令,而不需要創(chuàng)建這個目標(biāo))和工作目錄下的實(shí)際文件出現(xiàn)名字沖突。2.?提高執(zhí)行make時的效率,特別是對于一個大型的工程來說,編譯的效率也許你同樣關(guān)心。
規(guī)則所定義的命令不是去創(chuàng)建目標(biāo)文件,而是使用make指定具體的目標(biāo)來執(zhí)一些特定的命令。像下邊那樣:?
clean:?
rm?*.o?temp?
規(guī)則中“rm”不是創(chuàng)建文件“clean”的命令,只是刪除當(dāng)前目錄下的所有.o文件和temp文件。在工作目錄下不存在“clean”這個文件時,我們輸入“make?clean”后,“rm?*.o?temp”總會被執(zhí)行。這是我們的初衷。?
但當(dāng)前工作目錄下存在文件“clean”時情況就不一樣了,在我們輸入“make?clean”時。規(guī)則沒有依賴文件,所以目標(biāo)被認(rèn)為是最新的而不去執(zhí)行規(guī)則作定義的命令,命令“rm”將不會被執(zhí)行。這并不是我們的初衷。為了避免這個問題,我們可以將目標(biāo)“clean”明確的聲明為偽目標(biāo)。將一個目標(biāo)聲明為偽目標(biāo)需要將它作為特殊目標(biāo).PHONY”的依賴。如下:?
.PHONY?:?clean?
這樣目標(biāo)“clean”就是一個偽目標(biāo),無論當(dāng)前目錄下是否存在“clean”這個文件。我們輸入“make?clean”之后?!皉m”命令都會被執(zhí)行。而且,當(dāng)一個目標(biāo)被聲明為偽目標(biāo)后,make在執(zhí)行此規(guī)則時不會試圖去查找隱含規(guī)則來創(chuàng)建這個目標(biāo)。這樣也提高了make的執(zhí)行效率,同時我們也不用擔(dān)心由于目標(biāo)和文件名重名而使我們的期望失敗。在書寫偽目標(biāo)規(guī)則時,首先需要聲明目標(biāo)是一個偽目標(biāo),之后才是偽目標(biāo)的規(guī)則定義。目標(biāo)“clean”書寫格式應(yīng)該如下:?
.PHONY:?clean?
clean:?
rm?*.o?temp?
舉例:創(chuàng)建makefile
test:*.o
?? ?gcc -o $@ $^
*.o:*.c
?? ?gcc -c $<
.PHONY:clean
clean:
?? ?rm -f test *.o
總結(jié)
以上是生活随笔為你收集整理的makefile之伪目标(6)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不会用Photoshop抠图?Pytho
- 下一篇: FreeModbus源码获取