2013-06-01 120 views
1

我目前对makefile目标的工作方式感到困惑。我有一个目前的了解,我不知道这是否正确,因为我一直在阅读的教程并不是很清楚。这是我目前的理解makefile依赖关系如何工作?

  1. 当你在终端运行“化妆”,makefile文件的工具找到的第一个目标在生成文件,并尝试运行它,但这样做之前,它看起来在所有的依赖关系文件
  2. (这是我开始感到困惑的地方):如果依赖项是生成文件中的目标,但不存在作为生成文件目录中的文件,则只需运行目标。如果依赖项是文件名,但不是生成文件中的目标,则实用程序会检查文件的存在,如果该文件不存在,该实用程序就会对您发出警告。如果依赖项是目录和目标中存在的文件,那么只要文件目标所依赖的任何文件比关联文件更新,就会运行目标。

我必须下来吗?它比我做出来更简单吗?

+0

这听起来是正确的。 –

回答

3

你说的没错,或多或少,但它可以说得更清楚一点。关于如何选择初始目标,你是对的,除非用户在make命令行上指定了特定的目标,然后使用该目标而不是第一个目标。

然后使基本实现了每个目标的递归算法,即是这样的:

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

就是这样!当然,这隐藏了许多复杂的问题:特别是在目标没有隐含规则的情况下,项目#1(找到规则)可能会很复杂。另外,可以修改诸如规则失败时要执行的操作等行为。

但这是基本算法!