Makefile簡單入門

2021-07-07 02:35:43 字數 2431 閱讀 4477

作為linux或unix下的程式開發人員,大家一定都遇到過makefile,用make命令來編譯自己寫的程式確實是很方便。一般開發情況下,大家都是手工寫乙個簡單makefile。下面先給乙個最簡單的示例**:

#makefile示例

object= main.o function.o

change:$(object)

cc -o change $(object)

mv change $(home)/bin

main.o:

cc -c main.c -i$(home)/program/date/include

function.o:

cc -c function.c -i$(home)/program/date/include

clean:

rm change $(object)

說明:

這裡是使用unix下的cc編譯器,當然也能換成gcc

最後生成的可執行檔名:change

源程式檔案:main.c function.c

.h檔案(標頭檔案)所在目錄:$(home)/program/date/include

中間目標檔名:main.o function.o

當在shall中執行命令:

make clean
將會執行

rm change $(object)
刪除檔案: change main.o function.o

語句:

mv change $(home)/bin
將最終生成的可執行檔案移動到

$(home)/bin
這一步可以不要,但這樣符合目錄管理規範,而且$(home)/bin一般在環境變數path中有設定,這樣可以在任意目錄下時也能執行可執行檔案。

注意:makefile編輯時另起一行,注意不能用空格,要用tab鍵,否則會報錯

makefile裡面的注釋用#,其它都會報錯

makefile簡單介紹

makefile是用於自動編譯和鏈結的,乙個工程有很多檔案組成,每乙個檔案的改變都會導致工程的重新鏈結,但是不是所有的檔案都需要重新編譯,makefile中紀錄有檔案的資訊,在make時會決定在鏈結的時候需要重新編譯哪些檔案。

makefile的宗旨就是:讓編譯器知道要編譯乙個檔案需要依賴其他的哪些檔案。當那些依賴檔案有了改變,編譯器會自動的發現最終的生成檔案已經過時,而重新編譯相應的模組。

一、程式的編譯及鏈結

我們編譯程式,無非是想要得到乙個可執行檔案,而這個過程則是經過這兩步:

***.c->編譯->***.o->鏈結->可執行檔案。即.c經過編譯得到.o檔案,.o檔案是乙個中間檔案,再對這些中間檔案進行鏈結最終可得到可執行檔案。

二、makefile的規則

首先,來看一看makefile的書寫規則:

target ... : prerequisites ...

command

......

target也就是乙個目標檔案,可以是.o檔案,也可以是執行檔案,還可以是乙個標籤(label)。

prerequisites就是,要生成那個target所需要的檔案或是目標。

command也就是make需要執行的命令(任意的shell命令)。這裡要注意的是在命令前面要加上乙個tab鍵,不是空格,是按乙個tab鍵按出來的空格。

這是乙個檔案的依賴關係,也就是說,target這乙個或多個的目標檔案依賴於prerequisites中的檔案,其生成規則定義在command中。說白一點就是說,prerequisites中如果有乙個以上的檔案比target檔案要新的話,command所定義的命令就會被執行。這就是makefile的規則,也就是makefile中最核心的內容。這是makefile的主線和核心,但要寫好乙個makefile還得繼續努力。

三、乙個最簡單的makefile例子

如有乙個工程,含有3個頭檔案及四個c檔案,那為了生成所需的可執行檔案,這時的makefile可以這樣寫:

test:main.o t1.o t2.o t3.o

gcc –o test main.o t1.o t2.o t3.o

main.o:main.c

gcc –c main.c

t1.o:t1.c t1.h

gcc –c t1.c

t2.o:t2.c t2.h

gcc –c t2.c

t3.o:t3.c t3.h

gcc –c t3.c

clean:

rm test main.o t1.o t2.o t3.o

到這裡乙個最簡單的makefile就寫好了,把它的名字儲存為makefile就可以了,這時你只要在終端敲一下make,它就自動幫你編譯鏈結了^_^如果敲入make clean,它將刪掉那些中間檔案及可執行檔案。

makefile簡單入門(三)

makefile有三個非常有用的自動變數,分別是 目標檔案,所有的依賴檔案,第乙個依賴檔案。還是原來的 objects main.o add.o sub.o test objects gcc o test objects main.o main.c gcc c main.c add.o add.c ...

makefile入門舉例(簡單寫)

1.首先準備所需的target和files 按照makefile的基本格式,如下圖所示.makefiles in linux an overview target為calculate。files為main.c,add.c divide.c minus,multiply.c math.c 分別如下 m...

Makefile 入門知識

這篇文章介紹在linux下進行c語言程式設計所需要的基礎知識。在這篇文章當中,我們將會學到以下內容 源程式編譯 makefile的編寫 程式庫的鏈結 程式的除錯 標頭檔案和系統求助 1.源程式的編譯 在linux下面,如果要編譯乙個c語言源程式,我們要使用gnu的gcc編譯器。下面我們以乙個例項來說...