主页 PC知识 网管技术 黑客帝国 安全技术 开放系统 程序设计 搜索 技术论坛

 

相关联接
 
RHU本级分类

技术开发
桌面应用
嵌入技术
问答(FAQ)
基础知识
企业应用&技巧

 
RHU阅读排行
·手把手教你如何写Makefile
·Linux下PCI设备驱动程序开发基本框架
·VSFTP+MySQL虚拟用户配置过程讲解
·如何在Linux桌面上搭建C/C++IDE开发环境
·嵌入Linux基于MiniGUI信息终端软件开发
·Linux下动态链接库技术分析和移植技巧
·Linux网络编程几个必需的网络函数介绍
·一套的实用完整Makefile参考模板
·Sniff网络基础原理和软件实现技巧详解
·Linux系统和内核初始化过程简要介绍

 
 
RHU最新文章
·几个重要的Linux操作系统 内核文件介绍
·构筑Linux防火墙之为个人用户设置防火墙
·构筑防火墙之IPtables搭建防火墙的规则
·如何使用Linux LiveCD评估系统的安全性
·磨炼Gentoo的锋芒之只要敢想 就有Gentoo
·揭秘Linux内核调试器之内幕
·用SRP建立安全的Linux Telnet服务器
·构筑Linux防火墙之什么是Linux防火墙
·Fedora core 2服务器平台安全设置揭秘
·引黑客入瓮 给Linux系统蒙上Windows面纱

 
 
RHU相关搜索









 
 
RHU广而告之

 
 
>您的位置:首页 -> Linux/Unix-> 技术开发
一套的实用完整Makefile参考模板

作者:RHU-TAC编辑员 来自:RHU网络采集 时间:2005-5-13 双击滚屏 收藏本页 字体:


点击 查看RHU2004全年文章


近来,经常看到有人询问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文件和建立的所有目标。


OVER

[1] 页 RedHyphone.Union 投稿邮箱
[特别声明]:
本站文章大多搜索转载自网络中,如果侵犯了您的权利,请告之我们。本站将立即删除。
本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
查看评论】【向上滚屏】【关闭窗口】【 打印
-相关文章
  • 认知盲区 解惑双网卡双线路DNS解析
  • FlashFXP 简体中文版 3.7.5 Build 1303 Beta[烈火]
  • 确认:番茄花园作者洪磊被检察院批准逮捕
  • 1983年的今天 DNS诞生
  • Windows 2003 IIS 6.0搭建asp+.net+php+jsp+mysql+mssql
  • -文章评论 (关闭)
    ·还没有相关的评论!

    网上大名:
    红旋风网络技术联盟 RHUTech.Union
     
    Copyright © 2000-2007 RedHyphone.Union All Rights Reserved. 红旋风联盟版权所有.皖ICP备05011033号
    中国红旋风网络技术联盟 | www.RedHyphone.net
    Mailto:Redhyphone@gamil.com