Makefile簡單入門

 作爲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的宗旨就是:讓編譯器知道要編譯一個文件需要依賴其他的哪些文件。當那些依賴文件有了改變,編譯器會自動的發現最終的生成文件已經過時,而重新編譯相應的模塊。

一個簡單的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,它將刪掉那些中間文件及可執行文件。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章