1、Makefile偽目標的格式: 2、Makefile偽目標的作用: 第一種情況: 如果我們需要書寫這樣的一個規則:規則所定義的命令不是去創建目標文件,而是通過make命令行明確指定它來執行一些特點的命令,就像例題中的clean。當文件夾中沒有clean這個文件的時候,我們輸入“make clea ...
1、Makefile偽目標的格式:
.PHONY : clean
clean:
rm xxxx
2、Makefile偽目標的作用:
第一種情況:
如果我們需要書寫這樣的一個規則:規則所定義的命令不是去創建目標文件,而是通過make命令行明確指定它來執行一些特點的命令,就像例題中的clean。當文件夾中沒有clean這個文件的時候,我們輸入“make clean”能按照初衷執行,但是一旦文件夾中出現clean文件,我們再次輸入“make clean”,由於這個規則沒有任何依賴文件,所以目標被認為是最新的而不去執行規則所定義的命令。所以rm命令不會被執行。為瞭解決問題,我們將目標clean定義成偽目標。
clean:
rm xxxx
如果同一個目錄下有一個clean文件,那麼 make clean的動作將不會執行rm動作;
所以,增加.PHONY偽目標的使用的話,就會忽略目錄下clean這個文件,直接執行rm動作;
第二種情況:
偽目標的另一種使用場合時在make的並行和遞歸執行過程中。
SUBDIRS=foo bar baz Subdirs: for dir in $(SUBDIRS) do $(MAKE) –C $$dir done
如果這樣寫,會出現幾個問題:
1、 當子目錄執行make出現錯誤,make不會退出;
2、 使用這種shell的迴圈方式時,沒有用到make對目錄的並行處理功能。
有了偽目標就可以解決上面的兩個問題。
SUBDIRS=foo bar baz .PHONY:subdirs $(SUBDIRS) subdirs: $(SUBDIRS) $(SUBDIRS): $(MAKE) –C $@
其中subdirs模板表示要編譯多個子目錄中的工程。