makefile 依赖项如何工作?

MYV*_*MYV 3 makefile

我目前对 makefile 目标如何工作感到困惑。我目前的理解,我不知道它是否正确,因为我一直在阅读的教程对我来说不是很清楚。这是我目前的理解

  1. 当您在终端中运行“make”时,makefile 实用程序会找到 makefile 中的第一个目标并尝试运行它,但在执行此操作之前,它会查看文件中的所有依赖项
  2. (这就是我开始感到困惑的地方):如果依赖项是 makefile 中的目标,但不作为 makefile 目录中的文件存在,则 make 只是运行该目标。如果依赖项是文件名,但不是 makefile 中的目标,则该实用程序会检查该文件是否存在,如果该文件不存在,该实用程序就会对您大喊大叫。如果依赖项是目录中存在的文件和目标,则只要文件目标依赖的任何文件都比关联文件新,则运行目标。

我把它记下来了吗?是不是比我想象的简单?

Mad*_*ist 5

你说得或多或少是对的,但可以说得更清楚一些。关于 make 如何选择初始目标,您是正确的,当然,如果用户在 make 命令行上指定特定目标,则使用该目标而不是第一个目标。

然后 make 基本上为每个目标实现一个递归算法,其工作原理如下:

  1. 找到建立该目标的规则。如果没有构建目标的规则,则 make 失败。
  2. 对于目标的每个先决条件,以该先决条件作为目标运行此算法。
  3. 如果目标不存在,或者任何先决条件的修改时间比目标的修改时间新,则运行与目标关联的配方。如果配方失败,(通常)make 也会失败。

就是这样!当然,这隐藏了许多复杂的问题:特别是第 1 项(查找规则)在目标没有隐式规则的情况下可能会很复杂。还可以修改规则失败时应采取的措施等行为。

但这是基本算法!