makefile的规则

原创 2008年10月02日 16:55:00

     makefile的规则是make进行处理的依据,它包括了目标文件、依赖文件和它们之间的命令。一般来说,makefile的一个语句就是一个规则,在以前的那个例子中,都显示的指出了makefile的规则关系,如:“$(CC) $(CFLAGS) -c $< -o $@”,但为了简化makefile的书写,makefile包含了隐式规则和模式规则,下面就对这两个规则进行一下阐述:

    1.隐式规则

    隐式规则可以告诉make如何使用传统的方式完成任务,这样呢,当用户使用它们时就不用详细指定它们编译的具体细节,而只需将目标文件列出就好。make会自动搜索隐式规则目录来确定如何生成目标文件。如前面的例子就可以简写如下:

    OBJS = kang.o yul.o

    CC = Gcc

    CFLAGS = -Wall -O -g

    sunq : $(OBJS)

          $(CC) $^ -o $@

    由于隐式规则的缘故,我们故可以省略后两句。在make的隐式规则中指出:所有的.o文件都可以自动由.c文件按照命令"$(CC) $(CPPFLAGS) $(CFLAGS) -c file.c –o file.o"生成。这样“kang.o”和“yul.o”就会分别调用“$(CC) $(CFLAGS) -c kang.c -o kang.o”和“$(CC) $(CFLAGS) -c yul.c -o yul.o”生成,所以在我们看到好多的makefile就会省略掉后面的几句。

注意:

    在隐式规则只能查找到相同文件名的不同后缀名文件,如”kang.o”文件必须由”kang.c”文件生成

下表3.16给出了常见的隐式规则目录:

表3.16                                              Makefile中常见隐式规则目录

对应语言后缀名

规 则

C语言:.c变为.o

$(CC) -c $(CPPFLAGS) $(CFLAGS)

C++语言:.cc或.c变为.o

$(CXX) -c $(CPPFLAGS) $(CXXFLAGS)

Pascal编译:.p变为.o

$(PC)-c $(PFLAGS)

Fortran编译:.r变为-o

$(PC)-c $(FFLAGS)

    2.模式规则

    模式规则是用来定义相同处理规则的多个文件的。不同于隐式规则,隐式规则仅仅能够用make默认的变量进行处理,而模式规则还可以引入用户自定义变量,为多个文件建立相同的规则,从而简化makefile的书写。

    模式规则的格式类似于普通规则,该规则的相关文件必须用“%”注明,使用模式规则修改后的makefile如下:

    CFLAGS = Wall -o -g

    CC = Gcc

    OBJS =kang.o yul.o

    sunq:$(OBJS)

        $(CC) -c $^ -o $@

    %.o:%.c

        $(CC) $(CFLAGS)-c $< -o $@

Makefile的基本规则

在Makefile中可以使用函数来处理变量,函数的返回值可以当做变量来使用。 一、字符串处理函数 $(subst,,)     名称:字符串替换函数——subst。     功能:把字串中的字符串替...
  • u010871244
  • u010871244
  • 2016年06月03日 10:44
  • 8786

初学Makefile——基本规则和习惯

面试被问到关于Makefile的问题,除了读u-boot和内核的Makefile等机会偶尔接触,根本就不熟悉,说读出个大概意思吧?很多细节不知道又不容易理解,没办法,还是从头动手练一下的好,这个行当,...
  • huqinweI987
  • huqinweI987
  • 2014年04月09日 13:13
  • 2072

Makefile详解-书写规则

书写规则 ———— 规则包含两个部分,一个是依赖关系,一个是生成目标的方法。 在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这...
  • u012313689
  • u012313689
  • 2016年11月02日 15:47
  • 677

从头开始写项目Makefile(八):模式规则

【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】     上一节讲到目录创建成功,目标文件没有生产到对应目录下,这...
  • gentleliu
  • gentleliu
  • 2014年07月23日 21:16
  • 2892

makefile的编译规则

一、Makefile里有什么? Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile...
  • xietingcandice
  • xietingcandice
  • 2014年11月26日 11:18
  • 835

跟我一起写Makefile:隐含规则

登录   跟我一起写Makefile:隐含规则 - Ubuntu中文 页面 讨论 编辑 历史     导航 首页最近更改随机页面 页面分类帮助 编辑 ...
  • zyex1108
  • zyex1108
  • 2016年06月27日 13:27
  • 406

C语言的本质(37)——makefile之隐含规则和模式规则

Makefile有很多灵活的写法,可以写得更简洁,同时减少出错的可能。本节我们来看看这样一个例子还有哪些改进的余地。 一个目标依赖的所有条件不一定非得写在一条规则中,也可以拆开写,例如: main.o...
  • yincheng01
  • yincheng01
  • 2014年07月24日 13:57
  • 1669

linux makefile 书写详细规则

概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,m...
  • u011244446
  • u011244446
  • 2014年08月23日 17:30
  • 817

Makefile学习之隐含规则(一)

休息了两天...继续加油..... 在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o] 文件,Wi...
  • suzilong11
  • suzilong11
  • 2012年08月13日 18:28
  • 1203

Makefile的隐晦规则只 针对.c不针对。o

比如 hello:hell.o 就必须写 而hell.o:hello.c
  • u013176681
  • u013176681
  • 2014年08月21日 17:45
  • 485
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:makefile的规则
举报原因:
原因补充:

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