免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5915 | 回复: 4
打印 上一主题 下一主题

[技术动态] 一套完整的makefile样板 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-09 09:33 |只看该作者 |倒序浏览
~/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&nbs'''l''';ls|grep -v&nbs'''l'''`; 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|grpbpv&nbs;'''.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 - samenpwh&nbs;'''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 - samenpwh&nbs;'''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:

    使用方法:[/b:569e1de99]b>在主目录下用'''make''''命令能够首先建立函数库,然后建立所有目标2.在主目录下使用''mk&bsp;tar''''命令能够对整个系统进行打包,生成的文件以日期和时间命名 在下目录中直接用'''make''''命令会首先给出用法提示,然后建立本目录所有目标 <>.在最下层子目录中使用''mk&bsp;all''''命令不出现提示信息,直接建立本目录所有目标 <>.最层子目录中使用''''k&bp;clear''''命令可以清除本目录的所有.o文件 <>.最层子目录中使用''''k&bp;clean''''命令可以清除本目录的所有.o文件和建立的所有目标

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

论坛徽章:
0
2 [报告]
发表于 2013-08-09 10:26 |只看该作者
代码用论坛的插入代码功能修饰下好些,看的有点头晕。。

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
3 [报告]
发表于 2013-12-12 17:23 |只看该作者
马克刘明!

论坛徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龙
日期:2013-12-27 13:40:49亥猪
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龙
日期:2014-01-26 17:02:25午马
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
4 [报告]
发表于 2013-12-12 17:25 |只看该作者
俺用cmake,make太复杂了

论坛徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龙
日期:2013-12-27 13:40:49亥猪
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龙
日期:2014-01-26 17:02:25午马
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
5 [报告]
发表于 2013-12-12 17:25 |只看该作者
俺用cmake,make太复杂了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP