规则+工程:一种比较灵巧通用的Makefile写法

原创 2005年02月28日 17:58:00

规则+工程:一种比较灵巧通用的Makefile写法

整理项目的makefile,顺便对其写法简单归纳整理如下。这种写法乍一看让人比较晕,定义的规则和宏比较多,貌似有点累赘。

但是如果项目比较大的话,这种写法有利于统一项目生成规则(相同类型的文件都用相同的处理规则),减少makefile编写的工作量(不需要自己编写规则,只需要提供文件列表),同时也减少了出错的概率。比较规范和灵活通用,值得借鉴。

这种写法把Makefile分为通用规则定义文件和工程定义文件两部分

------------------------------------------------------------

[com.mk通用规则定义文件]

CC = gcc

 #.SUFFIXES定义符合编译规则的扩展文件类型,.c/.h/.cxx已经被默认支持。

#示例增加了.d文件(Pro*C文件.pc也可以如此处理)

.SUFFIXES:   .d 

#定义相同类型文件对应的统一规则
.c.o:                                          #定义如何从.c生成.o的规则
       @echo '--'$*.c                 #写这一行,可以打印出被处理的文件
       $(CC) -o $*.o -c $*.c      # 生成.o的语句


.d.c:                                         #定义如何从.d文件生成.c文件的规则
       @echo '--'$*.d                #写这一行,可以打印出被处理的文件
       cp $*.d $*.c                    #生成.c文件的语句

.d.o:                                        #定义如何从.d文件生成.o文件的规则
       @echo '--'$*.d               #写这一行,可以打印出被处理的文件
       cp $*.d $*.c                   #因为本例中是要调用c编译器,所以先生成.c文件
       $(CC)  -o $*.o -c $*.c   #再从.c文件生成.o

#定义编译入口
all:build

# 下面这句定义了需要从哪些源文件(CFILE/DFILE所定义的列表)
#和什么规则(.c=.o即从.c生成.o; .d=.o表示从.d生成.o)生成目标文件

ALLOBJS =$(CFILE:.c=.o) $(DFILE:.d=.o)

#编译命令,表示先编译目标对象,再输出可执行文件
$(EXE):$(ALLOBJS)
 $(CC) -o $@ $(ALLOBJS)

#清除语句,同样是利用了规则定义,
clean:
 rm -f $(DFILE:.d=.o) $(DFILE:.d=.c)
 rm  -f $(CFILE:.c=.o)
 rm -f  $(EXE)

------------------------------------------------------------

[makefile代码目录下的工程定义文件]

#定义输出目标名称
EXE=testexe
#以下只需要提供文件列表和定义编译目标
CFILE=m.c                          #定义C源文件列表,可以有多个
DFILE=testd.d teste.d      #定义D源文件列表,可以有多个

#给编译入口赋值
build: $(EXE)

COMMPATH=./  #指定模版所在路经

include $(COMMPATH)/com.mk                 #包含通用模版文件,make会调用通用模版里的规则,进行编译

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Makefile之大型工程项目子目录Makefile的一种通用写法

转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8902133,作者:gqb666    管理Linux环境下的大型...

Makefile之大型工程项目子目录Makefile的一种通用写法

原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8902133,作者:gqb666    管理Linu...

软件工程通用makefile写法学习总结

工程通用makefile简单实现 最近学习了一下makefile,总结了一些经验,自己试着写了一套简单通用的软件工程makefile,总结下来以后可能会用到。 我的工程目录是这样的结构: 顶层目...

Makefile 实际用例分析(一) ------- 比较通用的一种架构

这里不再说Makefile的基本知识,如果需要学习,那么请参考: 下载:makefile 中文手册 或者 点击打开链接 或者 跟我一起写Makefile( 陈皓 ) 这里说的是一...

makefile的一种写法

关于Makefile的基本写法网上已经很多了,这里不再叙述, 这里主要探讨在实际的项目中,怎样写Makefile才能更容易维护和扩展. 我们知道,在写C/C++的程序中,少不了引用系统的头文件, 库文...

makefile的通用写法

当写的源代码多了,工程多了,如果用手动的去gcc/g++,相信,碰到boost这个工程,那只能是疯掉了。古老的工具,也往往是最有用的,这个工具就是makefile。我在05年就把陈皓的博文整理成pdf...

Makefile的一种写法

适用于目录下有较多源文件的情况makefile 式列,例如:CC = gcc LD = gcc TARGET = test SRCS = $(wildcard *.c) OBJS = $(patsub...

编译多个独立程序的Makefile的一种写法

今天看书敲例子,编写了在一个文件夹中多个独立程序的Makefile文件。 其中我的文件夹下有如下文件: abort.c  child.c execve.c  getname.c pripds.c...

一个通用的Makefile写法

makefile的一种写法

多文件工程的编译-Makefile的简便写法

转自:http://www.cnblogs.com/houjun/p/4900659.html 通常我们在命令行使用GCC对程序进行编译,如果对于单个或者几个文件时比较方便的,但当工程中的文...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)