天天看點

Makefile的常用技術總結

一、MAKE中的自動變量:

    $@: 表示target的名字

    $%: 僅當目标是函數庫檔案中,表示規則中的目标成員名。例如,如果一個目标是"foo.a(bar.o)",那麼,"$%"就是"bar.o","$@"就是 "foo.a"。

    $<: 表示第一個依賴條件的名字

    $?: 表示所有比target更新的依賴條件的名字清單

    $^: 表示所有依賴條件的名字,同時去除依賴清單中重複的條件

    $+: 同$^的功能基本相同,但是他并不去除依賴清單中的重複條件

    自動變量的另外一類擴充為,其中D為directory,F為File

    $(@D): 如果$@為/sbin/ifconfig 那麼$(@D)為sbin

    $(@F): 如果$@為/sbin/ifconfig 那麼$(@F)為ifconfig

    其他自動變量均依此類推.

二、虛拟路徑:

    VPATH=variables (這裡VPATH是内部變量)

    vpath pattern directory-list (這裡vpath是内部指令)

    表示make搜尋target和prerequisite的目錄,但是指令部分不會利用虛拟目錄,他可以包含一組以空格分開的目錄清單。

    VPATH=include src

    vpath %.c src1 src2    (目錄可以有多個,模式隻能有一個)

    vpath %.h include

三、字尾規則:

    .SUFFIXES: .out .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l 以上是字尾規則中的預設内置規則。

    .SUFFIXES: .pdf .fo .html .xml,表示自定義的字尾規則。

    .SUFFIXES: 如果沒有定義任何必要條件,則表示打算删除所有的預設字尾規則。

    .o.cpp:

        g++ -I ./include -c $< -o $@

    等效于

    %.o: %.cpp

四、常用指令行選項:

    make -n = --just-print         隻是顯示指令,但并不真正執行他們,友善用于調試

    make -f = --file                    可以靈性制定makefile的名字

    make -C = --directory          指出makefile的執行目錄

    make -s = --silent               所有的指令都不顯示

    make -i = --ignore-errors     忽略指令中失敗的指令,仍然繼續執行

    make -B = --always-make    認為所有的目标都需要更新(重編譯)。

    make -e = --environment-overrides 指明環境變量的值覆寫makefile中定義的變量的值。

    make -h = --help

    make -I = --include-dir         指定一個被包含makefile的搜尋目标。可以使用多個“-I”參數來指定多個目錄

    make -r = --no-builtin-rule   禁止make使用任何隐含規則

    make -v = --version

    make -w = --print-directory  輸出運作makefile之前和之後的資訊。這個參數對于跟蹤嵌套式調用make時很有用。

    make -o = --old-file             不重新生成的指定的<file>,即使這個目标的依賴檔案新于它。

繼續閱讀