編寫Makefile


編譯:gcc -o hello hello.c
-o選項表示要求編譯器輸出的可執行文件名爲hello;
-c選項表示只要求編譯器輸出目標代碼,而不必輸出可執行文件;
-g選項表示要求編譯器在編譯的時候提供我們以後對程序進行調試的信息。
 
Makefile的編寫
如編譯步驟如下:
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o
用Makefile來表示就爲:
#以下爲Makefile文件
main: main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
main.o: main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o: mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o: mytool2.c mytool2.h
gcc -c mytool2.c
Makefile中最重要的是描述文件的依賴關係的說明,一般的格式爲:
target: components     #信賴關係
TAB rule  #規則
Makefile有三個非常有用的變量分別是$@ , $^ , $< 其中:
$@ --目標文件
$^ -- 所有的依賴文件
$< --第一個依賴文件

# 這是簡化後的Makefile文件
main: main.o mytool1.o mytool2.o
 gcc -o $@ $^
main.o: main.c mytool1.h mytool2.h
 gcc -c $<
mytool1.o: mytool1.c mytool1.h
 gcc -c $<
mytool2.o: mytool2.c mytool2.h
 gcc -c $<

另外Makefile有一個缺省規則:
..c.o:
gcc -c $<
這個規則表示所有的.o文件都是依賴與相應的.c文件的。如mytool.o依賴於mytool.c。
# 這是再一次簡化後的Makefile
main: main.o mytool1.o mytool2.o
 gcc -o $@$^
..c.o:
 gcc -c $<
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章