`
isiqi
  • 浏览: 16157506 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多

规则+工程:一种比较灵巧通用的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,包括顶层目录下的Makefile,子目录下Makefile,Makefile.build的写法和使用说明。

    CC++ 通用 Makefile

    本文提供了一个用于对 C/C++ 程序进行编译和连接以产生可执行程序的通用 Makefile。 在使用 Makefile 之前,只需对它进行一些简单的设置即可;而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动 ...

    通用makefile的一种写法

    由主makefile 执行make,进入子目录执行makefile编译文件, make clean也是依次进入子目录执行clean, 子目录中有file.mk包含要编译的文件,可对要编译的文件进行选择

    一个通用Makefile的编写

    我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件。...下面我们介绍一个比较通用而且简洁的Makefile,大家只要对它稍作修改就可以用在你们自己的工程里了。

    generic-makefile:C ++的通用Makefile

    通用makefile C ++的通用Makefile

    通用Makefile,适用于C/C++混合编程

    包含两个通用的Makefile,原理比较类似,适用于.c、.cpp、.cc的C/C++混合编程,当然也适用于只有一种语言的工程,用户可以根据各自的工程目录,稍加修改便可使用。

    makefile的写法makefile的写法

    我们首先看一个简单的makefile: CC = g++ OBJS = main.o base.o derive.o EXEC = test $(EXEC): $(OBJS) $(CC) -o $@ $^ main.o: main.cpp base.h derive.h $(CC) -c $ base.o: base.cpp base.h $(CC) -c...

    韦东山通用Makefile文件

    本程序的Makefile分为3类: 1. 顶层目录的Makefile 2. 顶层目录的Makefile.build 3. 各级子目录的Makefile 一、各级子目录的Makefile: 它最简单,形式如下: EXTRA_CFLAGS := CFLAGS_file.o := obj...

    UNIX下makefile写法

    UNIX下makefile写法

    嵌入式linux通用Makefile

    嵌入式linux通用Makefile

    Makefile写法及自动化工具

    Makefile写法及自动化工具,帮你简化多个c程序编译的麻烦。。

    万能makefile写法详解,一步一步写一个实用的makefile

    作者:胡彦 2013-5-21 ... 一 目的:编写一个实际可用的makefile,能自动编译当前目录下所有.c源文件,...你可以在makefile里用下面命令来比较: echo $$$$ echo $$$$; echo $$$$ 第四行:当make完后,每个临时文件.d...

    makefile的写法

    Linux下makefile写法的系统介绍,很好的东西,作者记不起来了。

    通用makefile编译工程文件

    通用makefile编译工程文件

    简单通用Makefile使用示例工程

    简单的能够编译C和C++工程,以及C与C++混合工程, ,有一些基础的makefile, 供大家一起学习交流,不知道怎么编程了需要41积分。。。

    Makefile学习教程: 跟我一起写 Makefile

    Makefile学习教程: 跟我一起写 Makefile 0 Makefile概述 0.1 关于程序的编译和链接 1 Makefile 介绍 1.1 Makefile的规则 1.2 一个示例 1.3 make是如何工作的 1.4 makefile中使用变量 1.5 让make自动推导 ...

    Makefile规则、Makefile规则、Makefile的条件执行、Makefile函数、Makefile库的生成和使用

    Makefile是一种用于自动化编译程序的工具,它包含一系列规则来指示系统如何构建应用程序。在Makefile中,每个规则由一个目标文件、一个或多个依赖文件以及一组命令行指令组成。make 程序根据 Makefile 中的规则描述...

    makefile写法

    makefile写法

Global site tag (gtag.js) - Google Analytics