靜態格式規則

靜態格式規則是指定多個目標並能夠根據每個目標名稱造對應的依賴名的規則。要使用靜態格式規則,目標文件名必須匹配目標格式,而且符合依賴格式的文件必須存在或可以創建。

格式规则的語法格式:

targets...: target-pattern: dep-patterns ...
     commands
...

目標可以含有通配符。target-pattern表示目標格式,dep-patterns表示依賴格式,通常都包含字符‘%’。目標格式匹配目標時,‘%’代表的字符串稱為徑(stem)。每个依賴名使用徑代替‘%’。在格式規則中使用的‘%’擴展是在所有變量和函數擴展以後進行的,而所有的變量和函數擴展都是在makefile文件讀入時完成的。

當目標格式中不包含‘/’,目標文件名中的路徑名部分首先被去除,然後再進行匹配,最後路徑名將會加在產生的依賴前面。

在依賴格式中不包含‘%’也是合法的,此時對所有目標来說,依賴是相同的。

OBJ= hello1.o hello2.o

all:$(OBJ)

$(OBJ):%.o: %.c

……

上面的規則展開後等同於下面兩條規則:

hello1.o: hello1.c

……

hello2.o: hello2.c

……

每一個目標必須和目標格式匹配,如果不符則產生警告。如果您有一系列文件,其中僅有一部分和格式匹配,您可以使用filter函數把不符合的文件移走。

FILE= test. c test1.o test2.o

(filter %.c,$(FILE) ): %.o: %.c

……

如果一個目標文件符合對於多個格式規則,使用最早出現的格式規則。自己編寫的格式規則比預定義的隱含規則優先。

格式規則只能用於規則中指定的目標。而隱含規則可以應用於任何與它匹配的目標,前提是這些目標没有與之對應的規則,而且隱含規則中對應的依賴也可以被搜尋到。如果有多條隱含規則社合,僅執行其中一條規則,按照隱含規則定義的順序進行選擇。

results matching ""

    No results matching ""