makefile 入门

一个 *Makefile 文件*是控制 make 程序操作的文本文件。make 程序通常用于管理源文件中程序的创建,但它可以更普遍地用于处理在修改其他文件(或先决条件 ) 后需要重新生成文件(或目标 )的任何进程。在生成文件描述了目标和先决条件之间的关系,并且还规定了到年月日时的先决条件的一个或多个发生了变化,使目标所需的命令。make 确定过时的唯一方法是比较目标文件的修改时间及其先决条件。 ** **

Makefile 在某些方面有点独特,最初可能会令人困惑。

首先,makefile 由同一文件中的两种完全不同的编程语言组成。文件的大部分是用 make 可以理解的语言编写的:这提供了变量赋值和扩展,一些预处理器功能(包括其他文件,文件各部分的条件解析等)以及目标及其定义先决条件。此外,每个目标都可以有一个配方与之关联,指定应调用哪些命令以使该目标更新。配方被编写为 shell 脚本(默认情况下为 POSIX sh)。make 程序不解析此脚本:它运行 shell 并将脚本传递给要运行的 shell。事实上,配方不是由 make 解析,而是由单独的 shell 进程处理,这对于理解 makefile 是至关重要的。

其次,makefile 不是像脚本那样的过程语言:因为 make 解析 makefile,它在内部构造有向图,其中目标是图的节点,先决条件关系是边。只有在所有的 makefile 完全解析并且图形完成之后,make 才会选择一个节点(目标)并尝试使其更新。为了确保目标是最新的,它必须首先确保每个目标的先决条件都是最新的,依此类推。