一、GNUmake与Makefile的简介

来源:互联网 发布:h3c snmp 网管软件 编辑:程序博客网 时间:2024/05/18 05:31

GNUmake与Makefile的简介

一、GNUmake

Linux(Unix)下,使用(GNU)make解释Makefile规则文件来完成工程的编译、链接等构建工作,快速的构建和管理工程。

二、Makefile

Makefile是make执行时读取的规则文件,通常我们命名为“Makefile”。Makfile文件是由一条一条的规则组合而成的。第一条规则我们称之为终极目标,当我们在shell下执行make时默认解释的规则就是终极目标的规则。一个完整的makefile文件,通常包含5个部分:显示规则、隐含规则、变量定义、指示符和注释。

三、make的执行机制

make执行时需要在工作目录下依次查看名为“GNUmakefile”、“makefile”、“Makefile”的规则说明文件。如果找到其中之一,则根据规则文件中第一个规则(如果不指定make目标)的目标和依赖最后修饰时间先后来确定是否更新目标文件。目标文件的最后修改时间晚于依赖文件,则无需更新目标文件,否则则执行对应的命令。如果没有找到三个文件名中的其中一个,则make什么也不会做。可以使用–f 选项来指定make命令读取的规则文本的文件名。

四、书写Makefile规则 

Makfle的规则由三部分组成:目标、依赖、命令。目标是我们需要构建的文件,依赖是构建目标时直接或间接参与构建的文件。命令就是通过某种过程来完成目标文件的构建。Makfile规则的格式:

目标 : 依赖

(Tab制表符)命令

目标通常是一个或多个文件,也可以是伪目标(不生成这个文件)。依赖可以是空,可以是一个或多个文件,用来与目标文件作最后修改时间的对比。命令可以为空、一条或多条。下面是一个简单规则的例子,示例1.1

main.o : main.c a.c b.c

(制表符) gcc –c main.c –o main.o

当前目录下的结构

|-- main.c

|-- a.c

|-- b.c

第一次执行make,目标文件是main.o,当前目录下并没有main.o,所以make会执行命令来构建main.o。第二次执行make,此时目录下已经存在main.o,并且main.o的最后修改时间晚于三个依赖文件的最后修改时间,所以make并不会执行命令,会提示main.o已经是最新。修改依赖文件中的其中一个并影响文件最后修改时间,第三次执行make,此时由于依赖文件中存在最后修改时间晚于目标文件的依赖文件,所以make又会重新执行命令来生成最新的main.o文件。