您现在的位置:机电论文网>> 技术讲座>> 正文内容

Makefile简介

作者: 来源: 发布时间:2011/2/23 14:12:28  点击数:2329
  makefile文件是make工具程序的配置文件。Make工具程序的主要用途是能自动地决定一个含有很多源程序的大型程序中的哪个文件需要被重新编译。
  通常makefile文件会告诉make如何编译和连接一个文件。当明确指出时,makefile还可以告诉make运行各种命令(例如,作为清理操作而删除某些文件)。
  make的执行过程分为两个不同的阶段。在第一个阶段,它读取所有的makefile文件以及包含的makefile文件等,记录所有的变量及其值、隐式的或显式的规则,并构造出所有目标对象以及其先决条件的一幅全景图。在第二阶段期间,make就使用这些内部结构来确定哪个目标对象需要被重建,并且使用相应的规则来操作。
  当make重新编译程序时,每个修改过的C代码文件必须被重新编译。如果一个头文件被修改过了,那么为了确保正确,每一个包含该头文件的C代码程序都将被重新编译。每次编译操作都产生一个与源程序对应的目标文件(object file)。最终如果任何源代码文件被编译过了,那么所有的目标文件不管是刚编译完还是以前被编译好的必须连接在一起以生成新的可执行文件。
  简单的makefile文件含有一些规则,这些规则具有如下的形式:
  目标(target)...:先决条件(prerequisites)...
          命令(command)
        ...
        ...
  其中的‘目标’对象通常是程序生成的一个文件的名称:例如是一个可执行文件或目标文件。目标也可以是所要采取活动的名字,比如‘清除’(clean)。‘先决条件’是一个或多个文件名,是用作产生目标文件的输入条件。通常一个目标依赖几个文件。而‘命令’是make需要执行的操作。一个规则可以有多个命令,每一个命令自生一行。请注意,需要在每个命令行之前键入一个制表符!
  如果一个先决条件通过目录搜寻而在另外一个目录中被找到,这并不会改变规则的命令;它们将被如期执行。因此,你必须小心地设置命令,使得命令能够在make发现先决条件的目录中执到需要的先决条件。这就需要通过使用自动变量来做到。自动变量是一种在命令行上根据具体情况能被自动替换的变量。自动变量的值是基于目标对象及其先决条件而在命令执行前设置的。例如,'$^‘的值表示规则的所有先决条件,包括它们所处目录的名称;'$<'的值表示规则中的第一个先决条件;'$@'表示目标对象;。。。
  有时,先决条件还常包含头文件,而这些头文件并不愿在命令中说明。此时自动变量'$<‘正是第一个先决条件。例如:
foo.o:foo.c defs.h hack.h
    cc -c $(CFLAGS) $< -o $@
  其中的'$<'就会被自动地替换成foo.c,而$@则会被替换成foo.o。
  为了让make能使用习惯用法来更新一个目标对象,你可以不指定命令,写一个不带命令的规则或者不写规则。此时make程序将会根据源程序文件的类型(程序的后缀)来判断要使用哪个隐式规则。
  后缀规则是为make程序定义隐式规则的老式方法。(现在这种规则已经不用了,取而代之的是使用更加清晰的模式匹配规则)。下面的例子就是一种双后缀规则。双后缀规则是用一对后缀定义的:源后缀和目标后缀。相应的隐式先决条件是通过使用文件名中的源后缀替换目标后缀后得到的。因此,此时下面的'$<'值是*.c文件名。而此条make规则的含义是将*.c程序编译成*.s代码。
.c.s:
    $(CC) $(CFLAGS) \
    -nostdinc -Iinclude -S -o $*.s $<

更多
字体:【】-【】-【】【关闭此页

上一篇:常用集成电路功用(含CD;74系列)'   下一篇:电子元件基础:保险电阻的简介'


特别声明:机电之家(http://www.jdzj.com )所共享的机电类资料,机电论文、机电类文章、机电企业类管理制度、机电类软件都来自网上收集,其版权归作者本人所有,如果有任何侵犯您权益的地方,请联系我们,我们将马上进行处理。购买的论文都出自原创,保证作者的原创的版权的转让,任何纠纷由法律解决。