GNU Makefile简介

2012-12-10来源 : 互联网

在 Linux(Unix)环境下使用GNU的make工具能够比较容易的构建一个属于个人的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于*后的执行。Make指令*终要借助于Makefile文件的编写,Makefile包括一套自己的语法和规则,是make的基础。

Makefile里面可以配置整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作,Makefile就像一个Shell脚本一样,甚至可以执行操作系统的命令。

Makefile的精髓在于 “自动化编译”,一旦写好,只需要一个make命令,整个工程**自动编译,极大的提高了软件开发的效率。

Makefile的一般形式如下:

target:prerequisites

command

其中的target表示规则的目标。通常是*后需要生成的文件名或者为了实现这个目的而必需的中间过程文件名,可以是Object File,也可以是执行文件。另外,目标也可以是一个make执行动作的名称,如伪目标“clean”。Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)。

prerequisites是规则的依赖。指的是生成target所需要的文件。通常一个目标依赖于一个或者多个文件。

command是规则的命令。是规则所要执行的动作(任意的shell命令或者是可在shell下执行的程序)。它限定了make执行这条规则时所需要的动作。一个规则可以有多个命令行,每一条命令占一行。其中要特别注意的是每一个命令行必须以[Tab]字符开始,[Tab]字符告诉make 此行是一个命令行,make按照命令完成相应的动作。这是书写Makefile中容易产生,而且比较隐蔽的错误。

当键入make指令后,它会按照如下步骤去执行命令:

1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。

2、如果找到,它会找文件中的**个目标文件(target),并把这个文件作为*终的目标文件。

3、如果目标文件不存在,或是其所依赖的后面的.o文件的修改时间要比目标文件本身新,那么他就会执行后面所定义的命令来生成这个文件。

4、如果目标文件所依赖的.o文件也不存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据相应的规则生成.o文件。

5、make查到.o文件所依赖的.c和.h文件,编译生成.o文件,再用.o文件生成可执行文件,也就是我们的目标文件。

这就是整个make的依赖性,make会一层一层地去找文件的依赖关系,直到*终编译出**个目标文件。在找寻的过程中,如果出现错误,比如*后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令错误,或是编译不成功,make则不关心。

另外,make还有自动推导文件依赖的功能,上文提到的.o文件,make会默认去寻找跟其命名相同的.c和.h文件作为依赖加入到依赖关系中,这样就避免了手动加入依赖文件,方便编写程序。

 

©2004 3158招商加盟网. All Rights Reserved.

3158招商加盟网友情提示:投资有风险,选择需谨慎