【问题标题】:how do makefile dependencies work?makefile 依赖项如何工作?
【发布时间】:2013-05-28 12:21:52
【问题描述】:

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

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

我写对了吗?比我说的简单吗?

【问题讨论】:

  • 听起来不错。

标签: makefile


【解决方案1】:

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

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

曾经舒适地转向其他更完整的手册,例如 GNU 手册。

【讨论】:

  • 这是一个非常好的介绍。我喜欢它将功能从编译中分离出来;很容易将两者混为一谈。
  • 这是学习自制基础知识的最佳资源!
【解决方案2】:

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

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

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

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

但这是基本算法!

【讨论】:

    猜你喜欢
    • 2016-09-14
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多