• makefile 模板


    应用系统的目录结构如下:
    1. ~/bin        可执行程序目录
    2. ~/etc        配置文件目录
    3. ~/inc        头文件目录
    4. ~/lib        函数库文件目录
    5. ~/log        日志文件目录
    6. ~/src        源程序文件目录
    7. ~/src/lib        函数库源程序目录
    8. ~/src/lib/LIB_1        函数库libLIB_1源程序目录
    9. ~/src/APP_A        子系统APP_A源程序目录
    10. ~/src/APP_A/mod_a        子系统APP_A模块mod_a源程序目录
    11. ~/.profile
    12. ~/makefile
    复制代码

    ~/makefile文件内容如下:
    1. all:
    2.         @MakeSubDir() \
    3.         { \
    4.                 for DIR in `ls|grep 'lib';ls|grep -v 'lib'`; do \
    5.                         if [ -d $${DIR} ]; then \
    6.                                 cd $${DIR}; \
    7.                                 MakeSubDir; \
    8.                                 if [ -f makefile -o -f Makefile ]; then \
    9.                                         echo ""; \
    10.                                         pwd; \
    11.                                         make all; \
    12.                                 fi; \
    13.                                 cd ..; \
    14.                         fi; \
    15.                 done; \
    16.         }; \
    17.         MakeSubDir

    18. tar:
    19.         @tar -cf `date +%Y%m%d-%H%M%S`.tar .profile `ls|grep -v '.tar'`
    复制代码

    ~/src/lib/LIB_1/makefile文件内容如下:
    1. ALL:        INFO all

    2. BASEDIR        = $(HOME)
    3. INC        = $(BASEDIR)/inc
    4. LIB        = $(BASEDIR)/lib

    5. PRDNAME        = $(LIB)/libLIB_1

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

    7. OBJS        = LIB_1_f1.o LIB_1_f2.o

    8. AR        = ar <特定平台ar可选参数>;
    9. CC        = cc <特定平台cc可选参数>;

    10. all:        $(PRODUCT)

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

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

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

    20. INFO:
    21.         @echo "  make all - same with 'make' except this message"
    22.         @echo "  make clear - remove object files"
    23.         @echo "  make clean - remove all object and target files"
    24.         @echo ""

    25. clear:        FORCE
    26.         @rm -f *.o

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

    29. FORCE:
    复制代码

    ~/src/APP_A/mod_a/makefile文件内容如下:
    1. ALL:        INFO all

    2. BASEDIR        = $(HOME)
    3. INC        = $(BASEDIR)/inc
    4. LIB        = $(BASEDIR)/lib
    5. BIN        = $(BASEDIR)/bin

    6. MODULE        = $(BIN)/APP_A_mod_a
    7. TESTER        = APP_A_mod_a_t
    8. PRODUCT        = $(SERVER) $(TESTER)

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

    10. all:        $(PRODUCT)

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

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

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

    20. INFO:
    21.         @echo "  make all - same with 'make' except this message"
    22.         @echo "  make clear - remove object files"
    23.         @echo "  make clean - remove all object and target files"
    24.         @echo ""

    25. clear:        FORCE
    26.         @rm -f *.o

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

    29. FORCE:
    复制代码

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

    注:在某些环境下,由于make中调用shell命令的机制,可能不支持递归。
  • 相关阅读:
    Java开源框架推荐(全)
    Java性能提示(全)
    国外程序员整理的 C++ 资源大全 (zt)
    技术杂记之:在阿里云centos7上部署JDK MYSQL TOMCAT
    技术杂记之:vi使用入门
    Java全栈程序员之09:IDEA+GitHub
    SpringCloud无废话入门05:Spring Cloud Gateway路由、filter、熔断
    SpringCloud无废话入门04:Hystrix熔断器及监控
    SpringCloud无废话入门03:Feign声明式服务调用
    SpringCloud无废话入门02:Ribbon负载均衡
  • 原文地址:https://www.cnblogs.com/yuzaipiaofei/p/4124248.html
Copyright © 2020-2023  润新知