一套完整的makefile模板

应用系统的目录结构如下: 
代码:

~/bin   可执行程序目录 
~/etc   配置文件目录 
~/inc   头文件目录 
~/lib   函数库文件目录 
~/log   日志文件目录 
~/src   源程序文件目录 
~/src/lib   函数库源程序目录 
~/src/lib/LIB_1   函数库libLIB_1源程序目录 
~/src/APP_A   子系统APP_A源程序目录 
~/src/APP_A/mod_a   子系统APP_A模块mod_a源程序目录 
~/.profile 
~/makefile 
 

~/makefile文件内容如下: 
代码:

all: 
   @MakeSubDir() / 
   { / 
      for DIR in `ls|grep 'lib';ls|grep -v 'lib'`; do / 
         if [ -d $${DIR} ]; then / 
            cd $${DIR}; / 
            MakeSubDir; / 
            if [ -f makefile -o -f Makefile ]; then / 
               echo ""; / 
               pwd; / 
               make all; / 
            fi; / 
            cd ..; / 
         fi; / 
      done; / 
   }; / 
   MakeSubDir

tar: 
   @tar -cf `date +%Y%m%d-%H%M%S`.tar .profile `ls|grep -v '.tar'` 
 

~/src/lib/LIB_1/makefile文件内容如下: 
代码:

ALL:   INFO all

BASEDIR   = $(HOME) 
INC   = $(BASEDIR)/inc 
LIB   = $(BASEDIR)/lib

PRDNAME   = $(LIB)/libLIB_1

PRODUCT   = $(PRDNAME).a $(PRDNAME).so

OBJS   = LIB_1_f1.o LIB_1_f2.o

AR   = ar <特定平台ar可选参数> 
CC   = cc <特定平台cc可选参数>

all:   $(PRODUCT)

$(PRDNAME).a:   $(OBJS) 
   @echo "  Making $@ ..." 
   @$(AR) -r $@ $(OBJS)

$(PRDNAME).so:   $(OBJS) 
   @echo "  Making $@ ..." 
   @$(CC) -G -o $@ $(OBJS)

.c.o:   *.h $(INC)/*.h 
   @echo "  Compiling $< ..." 
   @$(CC) -c -I$(INC) $<

INFO: 
   @echo "  make all - same with 'make' except this message" 
   @echo "  make clear - remove object files" 
   @echo "  make clean - remove all object and target files" 
   @echo ""

clear:   FORCE 
   @rm -f *.o

clean:   FORCE clear 
   @rm -f $(PRODUCT)

FORCE: 
 

~/src/APP_A/mod_a/makefile文件内容如下: 
代码:

ALL:   INFO all

BASEDIR   = $(HOME) 
INC   = $(BASEDIR)/inc 
LIB   = $(BASEDIR)/lib 
BIN   = $(BASEDIR)/bin

MODULE   = $(BIN)/APP_A_mod_a 
TESTER   = APP_A_mod_a_t 
PRODUCT   = $(SERVER) $(TESTER)

CC   = cc <特定平台cc可选参数>

all:   $(PRODUCT)

$(MODULE):   APP_A_mod_a.o 
   @echo "  Making $@ ..." 
   @$(CC) $? -o$@ -L$(LIB) -lLIB_1

APP_A_mod_a_t:   APP_A_mod_a_t.o 
   @echo "  Making $@ ..." 
   @$(CC) $? -o$@ -L$(LIB) -lLIB_1

.c.o:   *.h $(INC)/*.h 
   @echo "  Compiling $< ..." 
   @$(CC) -c -I$(INC) $<

INFO: 
   @echo "  make all - same with 'make' except this message" 
   @echo "  make clear - remove object files" 
   @echo "  make clean - remove all object and target files" 
   @echo ""

clear:   FORCE 
   @rm -f *.o

clean:   FORCE clear 
   @rm -f $(PRODUCT)

FORCE: 
 

使用方法: 
1.在主目录下使用'make'命令能够首先建立函数库,然后建立所有目标。 
2.在主目录下使用'make tar'命令能够对整个系统进行打包,生成的文件以日期和时间命名。 
3.在最下层子目录中直接使用'make'命令会首先给出用法提示,然后建立本目录所有目标。 
4.在最下层子目录中使用'make all'命令不出现提示信息,直接建立本目录所有目标。 
5.在最下层子目录中使用'make clear'命令可以清除本目录的所有.o文件。 
6.在最下层子目录中使用'make clean'命令可以清除本目录的所有.o文件和建立的所有目标。

注:在某些环境下,由于make中调用shell命令的机制,可能不支持递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值