2008年9月2日 星期二

makefile 概述



如果 make 後面不指定 makefile name(gnu make use -f)
則預設使用當前路徑下的 makefile。

如果 make 後面不加 target
則預設去找第一個(本例的 test)
故只會印出 Just Test 的字串。

一般來說會將 all 擺在第一個
也就是預設 make 是做 make all。

make all 的順序:
1. 先找 mytest 的 target。
2. 做 mytest 前必須要有 main.o, TestDef.o。
3. 找到 main.o 的 target。
4. 做該 target 的事。
5. 找到 TestDef.o 的 target。
6. 做該 target 的事。
7. 最後做 mytest 要做的事,編出 mytest 的執行檔。

一些符號的意義:

- 表示忽略錯誤
@ 表示不印出訊息

以下來自 "http://www.study-area.org/cyril/opentools/opentools/x1176.html"

%.o: %.c

%表示所有相對於後面先決條件的檔名的意思,他不是*,因為他有一對一的相對應關係,foo.o 就要找foo.c。

foo.o: foo.c foo.h

$@ -- foo.o
$* -- 這個只有在內隱規則中有用。表示樣式或副檔名規則中對應到的字串。
$< -- foo.c
$? -- 同一個規則的所有先決條件名,但是只有原始程式碼改過的比 obj 檔新才會符合,也就是比 target 還新的先決條件檔案。
$^-- 所有先決條件,但是有的 make 像 solaris make 可能不認得這個自動變數。

沒有留言:

張貼留言