您的位置:首页 > 文档 > 编程技术 >
 文章分类 

如何使用make


创建:2005-10-26 16:53:56
作者:Unlinux
来自: http://www.Unlinux.com

蓝森林 http://www.lslnet.com 2001年3月22日 08:25

在shell的提示符号下,若键入"make",则它会到目前的目录下找寻Makefile这个档案
。然後依照Makefile中所记录的步骤一步一步的来执行。在我们写程式的时候,如果
事先就把compiler程式所需要的步骤先写在Makefile中的话,想要compiler程式的时候
就只要打入make的指令。只要程式无误的话,就可以获得所需要的结果了!




Makefile的格式:

(1)注解:
在Makefile中,任何以"#"为开头的的文字皆为注解,make在解译Makefile的
时候会忽略它。

(2)续接下行:
在Makefile中,若一行不足以容纳该命令的时候。可於该行之最後加一反斜线
()表示下一行为本行之延续,两行应视为一行来处理。

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

其实make本身已有许多的default的macro,如果要查看这些macro的话,可以
下make -p的命令。

(4)法则(Rules)
格式如下:
<Target 1>: depend
<command 1>
<command 2>
....

<Target 2>: depend
<command 3>
<command 4>
....

(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 utils.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键)。

摘自:http://www.linuxaid.com.cn

转载自:http://www.unlinux.com/doc/program/20051026/2307.html

评论】 【加入收藏夹】 【 】 【打印】 【关闭
 *  请尊重我们的劳动,转载请注明出自UnLinux.Com及作者名 * 

※ 相关链接
 ·TPC基准程序及tpmc值 ─ 兼谈在使用性能度量时如何避免误区  (2005-10-26 16:53:49)
 ·turbolinux如何建分区、vg、lv、fs  (2005-10-26 16:53:49)
 ·Ramdisk:在linux下如何使用 RAM 作为虚拟硬盘  (2005-10-26 16:53:48)
 ·Linux下如何删除Windows分区  (2005-10-26 16:53:47)
 ·/dev下 cua*被删除,该如何恢复  (2005-10-26 16:53:46)
 ·如何重新设定时区  (2005-10-26 16:53:46)
 ·服务器端如何设置ssh,指定IP访问  (2005-10-26 15:44:15)
 ·在Linux下如何驱动D-link DFE-530TX网卡  (2005-10-26 15:44:13)
 ·在RedHat环境如何手工建立tunnel(IPV6)  (2005-10-26 15:44:13)
 ·linux下如何拨号  (2005-10-26 15:44:12)

Copyright © 2005 UnLinux.Com All Rights Reserved