許多程序員都會在自己的Makefile文件中將第一個目標定義爲all然後再列出其他從屬目標。這個約定可以明確地告訴make,在未指定特定目標時,默認應該創建哪個目標。
1 依賴關係先寫目標的名稱,然後緊跟着一個冒號,接着是空格或TAB,最後是空格或TAB隔開的文件列表。如果想一次創建多個文件,可以利用僞目標all。假如程序由myapp和手冊myspp.1組成,可以用下面的語句
義:
all: myall myapp.1
2 規則在Makefile中空格和TAB是有區別的。規則所在行必須以TAB開頭。如果Makefile中的某行以空格結尾,這可能會導致make命令的失敗
3 註釋#開頭爲註釋
4 Makefile中的宏使用語句MACRONAME=value定義宏,$(MACRONAME)或${MACRONAME}引用宏。命令行的宏定義覆蓋Makefile中的宏定義。在Makefile之外用宏時,宏定義必須以單參數的形式傳遞,所以避免在宏定義中使用空格或給宏定義加上引號。
make的內置宏會隨着Makefile的處理進展而發生變化。
宏 | 定義 |
$? | 當前目標所依賴的文件列表中比當前目標文件還要新的文件 |
$@ | 當前目標的名字 |
$< | 當前依賴文件的名字 |
$* | 不包括後綴名的當前依賴文件的名字 |
兩個特殊字符(出現在命令前):
- : 忽略所有錯誤
@ :不要將該命令顯示在標準輸出上
5 多個目標 6 內置規則推導規則,make -p查看所有的內置規程
7 後綴和模式規則make也支持通配符語法的模式規則
8 用make管理函數庫該規則常見形式
.c.a:
$(CC) –c $(CFLAGS) $<
$(AR) $(ARRFLAGS) $@ $* .o
$(AR) 的默認取值是ar
$(ARRFLAGS)的默認取值是rv
9 makefile和子目錄mylib.a:
(cd mylibdirectory;$(MAKE))
用括號將兩個命令括起來,確保他們只被一個單獨的shell處理
10 GNU make和gccgcc –MM
生成項目的依賴關係