make 的执行过程如下:
1. 依次读取变量“ MAKEFILES”定义的 makefile 文件列表
2. 读取工作目录下的 makefile 文件(根据命名的查找顺序“ GNUmakefile”,
“ makefile”,“ Makefile”,首先找到那个就读取那个)
3. 依次读取工作目录 makefile 文件中使用指示符“ include”包含的文件
4. 查找重建所有已读取的 makefile 文件的规则(如果存在一个目标是当前读取的
某一个 makefile 文件,则执行此规则重建此 makefile 文件,完成以后从第一步
开始重新执行)
5. 初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行
分支
6. 根据“终极目标”以及其他目标的依赖关系建立依赖关系链表
7. 执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个
文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件)
1. 依次读取变量“ MAKEFILES”定义的 makefile 文件列表
2. 读取工作目录下的 makefile 文件(根据命名的查找顺序“ GNUmakefile”,
“ makefile”,“ Makefile”,首先找到那个就读取那个)
3. 依次读取工作目录 makefile 文件中使用指示符“ include”包含的文件
4. 查找重建所有已读取的 makefile 文件的规则(如果存在一个目标是当前读取的
某一个 makefile 文件,则执行此规则重建此 makefile 文件,完成以后从第一步
开始重新执行)
5. 初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行
分支
6. 根据“终极目标”以及其他目标的依赖关系建立依赖关系链表
7. 执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个
文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件)
8. 执行“终极目标”所在的规则
说明:
执行一个规则的过程是这样的:
对于一个存在的规则(明确规则和隐含规则)首先, make程序将比较目标文件和所有的依赖文
件的时间戳。如果目标的时间戳比所有依赖文件的时间戳更新(依赖文件在上一次执行make之后没
有被修改),那么什么也不做。否则(依赖文件中的某一个或者全部在上一次执行make后已经被修
改过),规则所定义的重建目标的命令将会被执行。这就是make工作的基础,也是其执行规制所定
义命令的依据.