網路城邦
上一篇 回創作列表 下一篇   字體:
如何使用make?(簡易版)
2007/01/03 14:24:05瀏覽1993|回應0|推薦0
在shell的提示符號下,若鍵入"make",則它會到目前的目錄下找尋Makefile這個檔案
。然後依照Makefile中所記錄的步驟一步一步的來執行。在我們寫程式的時候,如果
事先就把compiler程式所需要的步驟先寫在Makefile中的話,想要compiler程式的時候
就只要打入make的指令。只要程式無誤的話,就可以獲得所需要的結果了!

Makefile的格式:
(1)註解:
在Makefile中,任何以"#"為開頭的的文字皆為註解,make在解譯Makefile的
時候會忽略它。

(2)續接下行:
在Makefile中,若一行不足以容納該命令的時候。可於該行之最後加一反斜線
(\)表示下一行為本行之延續,兩行應視為一行來處理。

(3)巨集(macro)
巨集的格式為: =
例如:
CFLAGS = -O -systype bsd43

其實make本身已有許多的default的macro,如果要查看這些macro的話,可以
下make -p的命令。


(4)法則(Rules)

#如果 command 一行打不完可以接 \ 表示未完這樣就會續接下一行
#如果你希望即使這行command出問題也不回報的話就寫-command
    • <target>: 可以是這個該 rule 的名字, 也可以是該 rule 產生的檔名, 在這個 rule 裡面會以 $@ 取代
    • <dependency>: 可以是用來產生 target file 的 source file, 也可以是該 rule 要執行前必須先執行的其它 rule, 在這個 rule 裡面 會以 $? 取代
    • <command>: 就是平常會在 command line 打的東西, 加上用 $() $? $@ 取代的symbol
格式如下:

 :
 
 
....

 :
 
 
....



(5)一個非常簡單的Makefile
假設我們有一個程式,共分為下面的部份:
menu.c 主要的程式碼部份
menu.h menu.c的include file
utils.c 提供menu.c呼叫的一些function calls
utils.h utils.c的include file
同時本程式亦叫用了ncurses的function calls。
而menu.c和utils.c皆放在/usr/src/menu下。
但menu.h和utils.h卻放在/usr/src/menu/include下。
而程式做完之後,執行檔名為menu且要放在/usr/bin下面。


# This is the Makefile of menu
CC = gcc
CFLAGS = -DDEBUG -c
LIBS = -lncurses
INCLUDE = -I/usr/src/menu/include

all: clean install

install: menu
chmod 750 menu
cp menu /usr/bin

menu: menu.o
$(CC) -o $@ $? $(LIBS)

menu.o:
$(CC) $(CFLAGS) -o $@ menu.c $(INCLUDE)

utils.o:
$(CC) $(CFLAGS) -o $@ utils.c $(INCLUDE)

clean:
-rm *.o
-rm *~


在上述的Makefile中,要使用某個macro可用$(macro_name)如此的形式。make會自動
的加以展開。
$@為該rule的Target,而$?則為該rule的depend。
若在command的前面加一個"-",表示若此command發生錯誤則不予理會,繼續執行下去。
上述的Makefile的關係可以表示如下:
all
/ \
clean install
\
menu
/ \
menu.o utils.o

若只想清除source以外的檔案,可以打make clean。
若只想做出menu.o可以打make menu.o。
若想一次全部做完,可以打make all或是make。
要特別注意的是command之前一定要有一個TAB(即TAB鍵)。
( 時事評論政治 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=keithmin&aid=629566