2017年4月25日 星期二

[筆記] 關於 makefile 一些用法的筆記


.PHONY

關於 .PHONY,google 到的結果都是說這是個假目標(fake target)。目前看到解釋最淺顯易懂的是這個網誌

.PHONY: clean
clean:
    make -C $(KERN_VER_DIR)/ M=`pwd` clean
    rm *.o

在上例中,在沒有使用 .PHONY 來指定 clean 為假目標的話,若目錄中同時存在了一個名為 clean 的檔案,則 clean 這個目標就會被 makefile 認為是要建立 clean 這個檔案。但是 clean 這個目標底下並沒有任何的 dependencies,所以,clean 項目將永遠被視為 up-to-date,永遠不會被執行。

因為利用了 .PHONY 來指定 clean 為假目標,所以 make 不會去檢查目錄中是否存在了一個名為 clean 的檔案。如此也可以提昇 make 的執行效率。

Makefile 預設的假工作目標:
all install clean disclean TAGS info check

函式 wildcard

 在一般 make file rules 裡面,萬用字元(%)會自動被展開。但是遇到定義變數(setting variable)、或是函式的表達式裡面(inside the argument of a function)時,就無法自動展開。所以這時候就可以使用 function wildcard 展開(原文