將所有的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”)