作為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編譯器。下面我們以乙個例項來說...