Chinaunix首页 | 论坛 | 博客
  • 博客访问: 342123
  • 博文数量: 97
  • 博客积分: 3996
  • 博客等级: 中校
  • 技术积分: 750
  • 用 户 组: 普通用户
  • 注册时间: 2005-05-24 22:27
文章分类

全部博文(97)

文章存档

2012年(1)

2011年(8)

2010年(5)

2008年(2)

2007年(26)

2006年(54)

2005年(1)

我的朋友

分类: LINUX

2007-03-21 14:43:03

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

CODE:
~/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文件内容如下:

CODE:
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文件内容如下:

CODE:
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文件内容如下:

CODE:
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命令的机制,可能不支持递归。
阅读(933) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~