How to make makefile!

Makefile使用方法与示例解析
本文介绍了Makefile的使用,Make会先读取初始化文件,再读取Makefile。在shell中输入“make”,它会按Makefile步骤执行。还阐述了Makefile的格式,包括注解、续接下行、巨集、法则等,并给出简单示例,说明了各命令和宏的使用,最后给出使用ACE中间件的make文件示例。

Make reads its instructions from text files. An initialization file is read first, followed by the makefile.

在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键)。

如果你在项目中使用了ACE中间件,可以参考如下make文件:

#----------------------------------------------------------------------------
# $Id: Makefile 1.1 29/8/2005
#
# Makefile for the distributed Log Msg.
#---------------------------------------------------------------------------

#----------------------------------------------------------------------------
# Local macros
#---------------------------------------------------------------------------
BIN=ParcIFTest
FILES=ParcIFTest
SRC=$(addsuffix .cpp,$(FILES))
OBJ=$(addsuffix .o,$(FILES))
LIBS =-lParc
BUILD =$(VBIN)
ACE_ROOT=/home/zhouyopt/Axxess/ACE_wrappers
PARC_ROOT=/home/zhouyopt/Axxess/PARC_IF/lib
LDFLAGS=-L$(PARC_ROOT)
INCLUDE +=-I/home/zhouyopt/Axxess/aceEx/parc/include

#----------------------------------------------------------------------------
# Include macros and targets
#----------------------------------------------------------------------------
include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
include $(ACE_ROOT)/include/makeinclude/macros.GNU
include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU
include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU
include $(ACE_ROOT)/include/makeinclude/rules.local.GNU

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值