makefile 依赖项如何工作?

问题描述 投票:0回答:2

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

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

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

makefile
2个回答
6
投票

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

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

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

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

但这就是基本算法!


2
投票

对于你问的问题,你的理解是正确的!

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

一旦可以轻松地转向其他更完整的手册,例如 GNU make 手册。

© www.soinside.com 2019 - 2024. All rights reserved.