首頁 > 軟體

Makefile隱含規則

2020-06-16 17:30:18

Makefile兩個隱含規則;

  1. 將所有的name.o的依賴自動推導為name.c並使用規則$(CC) -c $(FLAGS) $(CPPFLAGS)得到目標。這個規則中只有-c是隱含規則中有的,後面兩個變數是留給使用者使用的,如果-c不夠用,可以通過設定他們來改變這條隱含規則,有了這條隱含規則,下面的寫法是被允許的

    res:main.o fcn.o
    .PHONY:clean
    clean:
    rm *.o
  2. 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”。
CCC語言編譯程式。預設命令是“cc”。
CXXC++語言編譯程式。預設命令是“g++”。
CPPC程式的前處理器(輸出是標準輸出裝置)。預設命令是“$(CC) –E”。
RM刪除檔案命令。預設命令是“rm –f”。
ARFLAGS函數庫打包程式AR命令的引數。預設值是“rv”。
ASFLAGS組合語言編譯器引數。(當明顯地呼叫“.s”或“.S”檔案時)。
CFLAGSC語言編譯器引數。
CXXFLAGSC++語言編譯器引數。
CPPFLAGSC前處理器引數。( C 和 Fortran 編譯器也會用到)。
LDFLAGS連結器引數。(如:“ld”)

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-10/136057.htm


IT145.com E-mail:sddin#qq.com