2

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

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

我记对了吗?它比我想象的简单吗?

4

2 回答 2

4

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

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

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

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

但这是基本算法!

于 2013-06-02T15:18:27.917 回答
2

对于您提出的问题,您的理解是正确的!

如果您仍然感到困惑,请查看此 :: http://www.jfranken.de/homepages/johannes/vortraege/make_inhalt.en.html

一旦舒适地转移到其他更完整的手册,如 GNU 手册 for make。

于 2013-06-02T03:56:30.900 回答