Chang-Han Lee

Download Report

Transcript Chang-Han Lee

Make
Chang-Han Lee, Department of Applied Mathematics, National Chiao Tung Taiwan University
2011/07/07
Outline

Makefile的基本結構

組成元素





變數
目標
相依項目
命令
Reference
Makefile的基本結構
3
Makefile的基本結構
目標(target): 我們要生成的檔案的名字
相依項目(dependencies): 生成target所需的檔名列表
命令(command): 可以是任何一個shell能執行的命令
Makefile的格式如下




#用「井」號表明註釋。
target: dependencies
#命令前面用的是「tab」而非空格。誤用空格是初學者容易犯的錯誤!
命令1
命令2
命令3
.
.
.
命令n
#可以使用「\」表示續行。注意,「\」之後不能有空格!
4
Makefile的基本結構
範例:
main.c:讓使用者輸入角度資料與呼叫其他三支副程式
haha.c:輸出一堆訊息
sin_value.c:計算使用者輸入角度之sin值
cos_value.c:計算使用者輸入角度之cos值
5
Makefile的基本結構
範例
範例:
$ make
6
Make的基本結構
範例
組成元素
7
組成元素

變數

目標(target)

相依項目(dependencies)

命令(command)
8
組成元素
變數

像寫程式一樣,make規則裡面的組成可以有動態的值,
這時就需要用變數來設值來取代與轉換以及日後維護

變數的規則




9
字母大小寫有差
不要使用字母、數字和底線以外的字元
使用變數時,用$(變數名)或${變數名}即可
使用真實的”$”字符,那麼你需要用”$$”來表示
組成元素
變數
變數範例
重新改寫剛剛的Makefile
main: main.o haha.o sin_value.o cos_value.o
gcc -o main main.o haha.o sin_value.o cos_value.o -lm
rm *.o
將所有有相關性的檔案設為一個變數
可調整的參數也設為一個變數
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
gcc -o main ${OBJS} ${LIBS}
rm *.o
10
組成元素
變數範例
命令




每條命令必須是以Tab鍵開頭,不可使用空白鍵
在命令行之間中的空格或是空行會被忽略,但是如果
該空格或空行是以Tab鍵開頭的,那麼make會認為其
是一個空命令
當我們用”@”字符在命令行前,那麼,這個命令將不
被make顯示出來
忽略命令的出錯,我們可以在Makefile的命令行前加一
個減號“-”
11
組成元素
命令
命令範例
@gcc -o main ${OBJS} ${LIBS}
@rm *.o
12
組成元素
命令範例
Reference



Tutorial Makefile
http://www.opussoftware.com/tutorial/TutMakefile.htm
鳥哥的linux私房菜
http://linux.vbird.org/linux_basic/0520source_code_and
_tarball.php#make
跟我一起寫Makefile
http://wiki.ubuntu.org.cn/index.php?title=%E8%B7%9F%
E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefil
e&variant=zh-hant
13
Reference