簡單的makefile例子

2021-05-23 16:04:08 字數 2174 閱讀 6881

1.2.3 簡單的示例

本小節開始我們在第一小節中提到的例子。此例子由3個頭檔案和8個c檔案組成。我們講述寫乙個簡單的makefile,來描述如何建立最終的可執行檔案「edit」,此可執行檔案依賴於8個c原始檔和3個頭檔案。makefile檔案的內容如下:

#sample 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

在書寫時,乙個較長行可以使用反斜線(/)分解為多行,這樣做可以使makefile清晰、容易閱讀。注意:反斜線之後不能有空格(這也是大家最容易犯的錯誤,而且錯誤比較隱蔽)。大家在書寫makefile時,推薦者中將較長行分解為使用反斜線連線得多個行的方式。當我們完成了這個maekfile以後;建立可執行程式「edit」,你所要做的就是在包含此makefile的目錄(當然也在**所在的目錄)下輸入命令「make」。刪除已經本目錄下生成的檔案和所有的.o檔案,只需要輸入命令「make clean」就可以了。

在這個makefile中,目標(target)包含:可執行檔案「edit」和.o檔案(main.o,kbd.o….),依賴(prerequisites)就是冒號後面的那些 .c 檔案和 .h檔案。所有的.o檔案既是依賴(相對於可執行程式edit)又是目標(相對於.c和.h檔案)。命令包括「cc –c maic.c」、「cc –c kbd.c」……

目標是乙個檔案時,當它的任何乙個依賴檔案被修改以後,這個目標檔案將會被重新編譯或者重新連線。當然,此目標的任何乙個依賴檔案如果有必要則首先會被重新編譯。在這個例子中,「edit」的依賴為8個.o檔案;而「main.o」的依賴檔案為「main.c」和「defs.h」。當「main.c」或者「defs.h」被修改以後,再次執行「make」時「main.o」就會被更新(其它的.o檔案不會被更新),同時「main.o」

的更新將會導致「edit」被更新。

在描述目標和依賴之下的shell命令列,它描述了如何更新目標檔案。命令列必需以[tab]鍵開始,以和makefile其他行區別。就是說所有的命令列必需以[tab] 字元開始,但並不是所有的以[tab]鍵出現行都是命令列。但make程式會把出現在第一條規則之後的所有的以[tab]字元開始的行都作為命令列來處理。(要記住:make程式不關心命令是如何工作的,對目標檔案的更新需要你在規則的描述中提供正確的命令。「make」程式所做的就是當目標程式需要更新時執行規則所定義的命令)。

目標「clean」不是乙個檔案,它僅僅代表了執行乙個動作的標識。通常情況下,不需要執行這個規則所定義的動作,因此目標「clean」沒有出現在其它規則的依賴列表中。在執行make時,它所指定的動作不會被執行。除非執行make時明確地指定它作為重建目標。而且目標「clean」沒有任何依賴檔案,它只有乙個目的,就是通過這個目標名來執行它所定義的命令。makefile中把那些沒有任何依賴只有執行動作的目標稱為「偽目標」(phony targets)。參考3.6 makefile偽目標一節。執行「clean」目標所定義的命令,可在shell下輸入:make clean

linux下Makefile的簡單例子及解釋

對於大一點的專案,makefile都是不可或缺的,這裡記錄乙個自己弄的簡單的例子。有3個file main.cpp main2.cpp main2.h main.cpp main函式所在,呼叫main2.cpp中的乙個外部函式test main2.cpp test函式所在 main2.h test的...

linux下Makefile的簡單例子及解釋

對於大一點的專案,makefile都是不可或缺的,這裡記錄乙個自己弄的簡單的例子。有3個file main.cpp main2.cpp main2.h main.cpp main函式所在,呼叫main2.cpp中的乙個外部函式test main2.cpp test函式所在 main2.h test的...

乙個最簡單的Makefile例子

1.hello.c include int main 2.makefile hello hello.o cc o hello hello.o hello.o hello.c cc c hello.c clean rm hello.o 說明 cc o hello hello.o前面是乙個tab的空格 ...