Makefile範例

一個簡單的Makefile檔,該檔描述了一個稱為文本編輯器(edit)的可執行檔生成方法,該檔依靠8個OBJ 檔(.o檔),它們又依靠8個C 根源程式檔和3 個頭檔。在這個例子中,所有的C語言原始檔案都包含‘defs.h’ 頭檔,但僅僅定義編輯命令的原始檔案包含‘command.h’頭檔,僅僅改變編輯器緩衝區的低層檔包含‘buffer.h’頭文件。

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

用Makefile檔創建可執行的稱為‘edit’的檔,鍵入:make 使用Makefile檔從目錄中刪除可執行檔和目標,鍵入:make clean 我們把每一個長行使用反斜杠-新行法分裂為兩行或多行,實際上它們相當於一行,這樣做的意圖僅僅是為了閱讀方便。 在這個Makefile檔例子中,目標包括可執行檔‘edit’和OBJ檔‘main.o’及‘kdb.o’。依賴是 C 語言原始檔案和C 語言頭檔如‘main.c’和‘def.h’等。事實上,每一個OBJ 檔即是目標也是 依賴。所以命令行包括‘cc -c main.c’和‘cc -c kbd.c’。 當目標是一個檔時,如果它的任一個依賴發生變化,目標必須重新編譯和連接。任何命 令行的第一個字元必須是‘Tab’字元,這樣可以把Makefile檔中的命令行與其他行分別開來。 目標‘clean’不是一個檔,僅僅是一個動作的名稱。正常情況下,在規則中‘clean’這個動 作並不執行,目標‘clean’也不需要任何依賴。一般情況下,除非特意告訴make 執行‘clean’ 命令,否則‘clean’命令永遠不會執行。注意這樣的規則不需要任何依賴,它們存在的目的僅 僅是執行一些特殊的命令。

results matching ""

    No results matching ""