Linux程式設計 Makefile 使用

2021-07-04 17:24:04 字數 2513 閱讀 4145

在先前的文章中,我們已經學習了 gcc 和 gdb 的使用。本節,我們將介紹 makefile 的使用。makefile帶來的好處就是——「自動化編譯」,一但寫好,只需要乙個 make 命令,整個工程便可以完全編譯,極大的提高了軟體的開發效率(特別是對於那些專案較大、檔案較多的工程)。

make是乙個命令工具,最主要也是最基本的功能就是根據makefile檔案中描述的源程式至今的相互關係來完成自動編譯、維護多個原始檔工程。

而makefile檔案需要按某種語法進行編寫,檔案中需要說明如何編譯各個原始檔並鏈結生成可執行檔案,要求定義原始檔之間的依賴關係。

下面從乙個簡單例項入手,介紹如何編寫makefile。假設現在有乙個簡單的專案由幾個檔案組成:prog.c、 code.c、 code.h。這些檔案的內容如下:

prog.c

#include #include "code.h"

int main(void)

code.c

#include "code.h"

int myfun(int in)

code.h

extern int myfun(int);
這些程式都比較短,結構也很清晰,因此使用下面的命令進行編譯:

$ gcc -c code.c -o code.o

$ gcc -c prog.c -o prog.o

$ gcc prog.o code.o -o test

如上所示,這樣就能生成可執行檔案test,由於程式比較簡單,而且數量也比較少,因此看不出來有多麻煩。但是,試想如果不只上面的3個檔案,而是幾十個或者是成百上千個甚至更多,那將是非常複雜的問題。

那麼如何是好呢?這裡就是makefile的絕佳舞台,下面是乙個簡單的makefile的例子。

首先$ vim makefile

test: prog.o code.o

gcc prog.o code.o -o test

prog.o: prog.c code.h

gcc -c prog.c -o prog.o

code.o: code.c code.h

gcc -c code.c -o code.o

clean:

rm -f *.o test

有了這個makefile,不論什麼時候修改原始檔,只要執行一下make命令,所有必要的重新編譯將自動執行。make程式利用makefile中的資料,生成並遍歷以test為根節點的樹;現在我們以上面的例項,來學習一下makefile的一般寫法:

test(目標檔案): prog.o code.o(依賴檔案列表)

tab(至少乙個tab的位置) gcc prog.o code.o -o test(命令)

.......

乙個makefile檔案主要含有一系列的規則,每條規則包含以下內容:乙個目標,即make最終需要建立的檔案,如可執行檔案和目標檔案;目標也可以是要執行的動作,如『clean』;乙個或多個依賴檔案的列表,通常是編譯目標檔案所需要的其他檔案。之後的一系列命令,是make執行的動作,通常是把指定的相關檔案編譯成目標檔案的編譯命令,每個命令佔一行,並以tab開頭(務必注意:是tab,而不是空格) 執行以上makefile後就會自動化編譯:

$ make

gcc -c prog.c -o prog.o

gcc -c code.c -o code.o

gcc prog.o code.o -o test

最後就會多產生: porg.o code.o test這三個檔案,執行./test檢視結果

還記得makefile中的clean嗎?make clean就會去執行rm -f *.o test這條命令,完成 clean 操作。

makefile還可以定義和使用巨集(也稱做變數),從而使其更加自動化,更加靈活,在makefile中定義巨集的格式為:

macroname = macrotext
使用巨集的格式為:

$(macroname)
我們用 「巨集」 的方式,來改寫上面的 makefile 例子。

objs = prog.o code.o

cc = gcc

test: $(bojs)

$(cc) $(objs) -o test

prog.o: prog.c code.h

$(cc) -c prog.c -o prog.o

code.o: code.c code.h

$(cc) -c code.c -o code.o

clean:

rm -f *.o test

linux程式設計 makefile檔案

今天我想說說這個makefile檔案了,makefile檔案?可能是我孤陋寡聞吧,原來在windows平台上我還真沒有聽說過這個東東,其實也是有的,只是我們沒有接觸到罷了。makefile檔案,是個什麼東西?有什麼用?怎麼來寫?這就是我要說的。我們都清楚,用傳統c c 語言開發乙個程式,都要經歷這幾...

linux程式設計 Makefile檔案

linux程式設計 makefile檔案 今天我想說說這個makefile檔案了,makefile檔案?原來在windows平台上我還真沒有弄過這個東東,其實也是有的,只是我們沒有接觸到罷了。makefile檔案,是個什麼東西?有什麼用?怎麼來寫?這就是我要說的。我們都清楚,用傳統c c 語言開發乙...

linux程式設計工具makefile

linux中對大量的工程檔案進行編譯,通常利用make工具來自動完成編譯,make工具通過乙個makefile makefile 檔案來完成自動維護編譯工作。makefile基本規則 分為三部分 target dependencies tab鍵 command 目標 target 需要生成的目標檔案...