2021-05-12 14:32:11
Makefile隱含規則
Makefile兩個隱含規則;
-
將所有的
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”)
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-10/136057.htm
相關文章