makefile依赖如何工作?

时间:2013-06-01 23:29:40

标签: makefile

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

  1. 当你在终端中运行'make'时,makefile实用程序会找到makefile中的第一个目标并尝试运行它,但在此之前它会查看文件中的所有依赖项
  2. (这是我开始感到困惑的地方):如果依赖项是makefile中的目标,但不作为makefile目录中的文件存在,则make只运行目标。如果依赖项是文件名,但不是makefile中的目标,则该实用程序会检查文件是否存在,如果该文件不存在,该实用程序会对您大喊大叫。如果依赖项是目录和目标中存在的文件,则运行目标,前提是该文件目标所依赖的任何文件都比关联文件新。
  3. 我能把它弄好吗?它比我做出来更简单吗?

2 个答案:

答案 0 :(得分:4)

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

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

  1. 查找构建该目标的规则。如果没有规则来构建目标,则make失败。
  2. 对于目标的每个先决条件,运行此算法并将该先决条件作为目标。
  3. 如果目标不存在,或者任何先决条件的修改时间比目标的修改时间更新,请运行与目标关联的配方。如果配方失败,(通常)失败。
  4. 就是这样!当然,这隐藏了许多复杂问题:特别是在您没有针对目标的隐式规则的情况下,项目#1(查找规则)可能很复杂。此外,还可以修改诸如规则失败时要执行的操作。

    但那是基本的算法!

答案 1 :(得分:2)

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

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

一旦转到其他更完整的手册,例如GNU手册,就可以了。