1. 程式人生 > >make的特殊之處

make的特殊之處

nbsp 情況 有意義 冒號 時機 並不是 方法 如果 意義

1 規則的先後順序問題

規則的先後順序只會影響默認的目標,沒有其它的影響。

2 make對具有相同目標的規則的處理方式

2.1 如果是單冒號

只能有一個規則是有命令的,然後對它們進行合並,即依賴合並。

2.2 如果是雙冒號

分別單獨處理,順序按照makefile中的順序。這種情況下,只有各個規則的命令是獨立才是有意義的。

3 make對模式規則和非模式規則匹配的先後順序

4 通配符擴展的時機

4.1 不會擴展的情況

第一,定義變量的時候

第二,作為函數的參數的時候

4.2 會自動擴展的情況

在命令中。

4.3 通配符擴展函數wildcard

$(wildcard *.c)

4.4 問題

在目標和依賴中的通配符呢,會自動擴展嗎?

5 沒有依賴和沒有命令的目標作為別人的依賴使用

當沒有依賴和沒有命令的目標作為別人的依賴使用時,該“別人”目標總是會被重新構建。

6 靜態模式規則

靜態模式規則是相對於模式規則而言的。

靜態模式規則有兩個冒號,它指定了明確的目標,然後通過目標模式去匹配依賴模式,從而找到相應的依賴。它是一種自動確定依賴的方法。

而模式規則不光自動確定依賴,還自動確定目標。

7 make的條件判斷的特殊之處

其它語言的條件判斷是控制執行流的,但是makefile的條件判斷並不是控制執行流的,它是控制makefile對make的可見性的,如果條件不滿足,那麽make就看不到makefile被條件包裹的部分。

8 無論rules的recipe怎麽寫,recipe的每行前面都必須是tab鍵,而不能是空格,否則make不能識別。

make的特殊之處