[zz]makefile寫法簡單示例

weixin_33860553發表於2012-04-23
例項1:
OBJ = a.o b.o main.o H = a.h b.h DBG = -g main : $(OBJ) gcc $(OBJ) $(DBG) -o main %.o : %.cpp $(H) g++ -c $< -o $@


例項2:

作為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的宗旨就是:讓編譯器知道要編譯一個檔案需要依賴其他的哪些檔案。當那些依賴檔案有了改變,編譯器會自動的發現最終的生成檔案已經過時,而重新編譯相應的模組。
 
例項3:
.PHONY: all clean

all : main

main : main.o a.o b.o
\TAB\ g++ -o main main.o a.o b.o

main.o : main.cpp b.h
\TAB\ g++ -o main.o -c main.cpp

a.o : a.cpp a.h
\TAB\ g++ -o a.o -c a.cpp

b.o : b.cpp b.h a.h
\TAB\ g++ -o b.o -c b.cpp

clean:
\TAB\ @rm -f a.o b.o main.o main

相關文章