make處理Makefile流程

edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
    cc -o edit main.o kbd.o command.o display.o \
    insert.o search.o files.o utils.o

main.o : main.c defs.h
    cc -c main.c
kbd.o : kbd.c defs.h command.h
    cc -c kbd.c
command.o : command.c defs.h command.h
    cc -c command.c
display.o : display.c defs.h buffer.h
    cc -c display.c
insert.o : insert.c defs.h buffer.h
    cc -c insert.c
search.o : search.c defs.h buffer.h
    cc -c search.c
files.o : files.c defs.h buffer.h command.h
    cc -c files.c
utils.o : utils.c defs.h
    cc -c utils.c
clean :
    rm edit main.o kbd.o command.o display.o \
    insert.o search.o files.o utils.o

缺省情況下,make開始於第一個目標(假想目標的名稱前帶‘.’)。這個目標稱為缺省最 終目標(即make最終更新的目標)。

在上節的簡單例子中,缺省最終目標是更新可執行檔‘edit’,所以我們將該規則設為第一規則。這樣,一旦您給出命令:make ,make 就會讀當前目錄下的makefile 檔,並開始處理第一條規則。在本例中,第一條規則是連接生成‘edit’,但在make 全部完成本規則工作之前,必須先處理‘edit’所依靠的OBJ 檔。

其他規則的處理根據它們的目標是否和缺省最終目標的依賴相關聯來判斷。如果 一些規則和缺省最終目標無任何關聯則這些規則不會被執行,除非告訴Make強制執行(如 輸入執行make clean命令)。

在OBJ 檔重新編譯之前,Make首先檢查它的依賴C 語言原始檔案和C 語言頭檔 是否需要更新。如果這些C 語言原始檔案和C語言頭檔不是任何規則的目標,make將不會 對它們做任何事情。

在 OBJ 檔重新編譯(如果需要的話)之後,make 決定是否重新連接生成edit 可 執行檔。如果edit 可執行檔不存在或任何一個OBJ 檔比存在的edit 可執行檔‘新’,則make 重新連接生成edit可執行檔。

這樣,如果我們修改了‘insert.c’檔,然後運行make,make 將會編譯‘insert.c’檔更 新‘insert.o’檔,然後重新連接生成edit可執行檔。如果我們修改了‘command.h’檔,然後運行 make,make將會重新編譯‘kbd.o’和‘command.o’檔,然後重新連接生成edit可執行檔。

results matching ""

    No results matching ""