make的特殊之處
阿新 • • 發佈:2017-09-06
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的特殊之處