兩個隱含規則; 1. 將所有的 的依賴自動推導為 並使用規則 得到目標。這個規則中只有 是隱含規則中有的,後面兩個變數是留給用戶使用的,如果 不夠用,可以通過設置他們來改變這條隱含規則,有了這條隱含規則,下麵的寫法是被允許的 2. 目標依賴於 ,其生成命令是: 。這個規則對於多個被依賴的目標文件同樣 ...
兩個隱含規則;
將所有的
name.o
的依賴自動推導為name.c
並使用規則$(CC) -c $(FLAGS) $(CPPFLAGS)
得到目標。這個規則中只有-c
是隱含規則中有的,後面兩個變數是留給用戶使用的,如果-c
不夠用,可以通過設置他們來改變這條隱含規則,有了這條隱含規則,下麵的寫法是被允許的res:main.o fcn.o .PHONY:clean clean: rm *.o
name
目標依賴於name.o
,其生成命令是:$(CC) $(LDFLAGS) name.o $(LOADLIBES) $(LDLIBS)
。這個規則對於多個被依賴的目標文件同樣有效,例如:name : y.o z.o
並且"name.c"、"y.c"和"z.c"都存在,則隱含執行:
cc -c name.c -o name.o cc -c y.c -o y.o cc -c z.c -o z.o cc name.o y.o z.o -o name rm -f name.o rm -f y.o rm -f z.o
隱含規則變數
隱含規則中使用了很多變數,我們可以通過設置這些變數來在一定程度上控制隱含規則,我們可以在Makefile的文件中為這些變數重新賦值,也可以在命令行中傳入或者在環境變數中寫入。我們還可以通過-R
來取消我們指定的變數的值對隱含規則的作用
AR
函數庫打包程式。預設命令是“ar”。
AS
彙編語言編譯程式。預設命令是“as”。
CC
C語言編譯程式。預設命令是“cc”。
CXX
C++語言編譯程式。預設命令是“g++”。
CPP
C程式的預處理器(輸出是標準輸出設備)。預設命令是“$(CC) –E”。
RM
刪除文件命令。預設命令是“rm –f”。
ARFLAGS
函數庫打包程式AR命令的參數。預設值是“rv”。
ASFLAGS
彙編語言編譯器參數。(當明顯地調用“.s”或“.S”文件時)。
CFLAGS
C語言編譯器參數。
CXXFLAGS
C++語言編譯器參數。
CPPFLAGS
C預處理器參數。( C 和 Fortran 編譯器也會用到)。
LDFLAGS
鏈接器參數。(如:“ld”)