使用虚假目标作为目标别名

Using phony targets as target aliases

我们有一个(非常复杂的)构建系统,我目前正在尝试对其进行清理和简化。它以一个 Perl 脚本为中心,设置各种相互依赖的环境变量,然后启动 make。调用什么目标 make 取决于传递给 Perl 脚本的参数、一些其他环境变量和当前月相。

让我烦恼的是我们的 makefile 包含太多虚假目标,这导致即使不需要也不断重建目标,这是一个巨大的时间浪费。目标(直接或间接)取决于大量虚假目标,并且由于虚假目标始终被视为 "out of date",所以很多东西都被不必要地更新了。

之所以有这么多虚假目标,是因为我们的 makefile 从来没有被直接调用,而是总是通过我之前提到的 Perl 脚本调用,并且通过有虚假目标,Perl 脚本不必知道确切的路径用户想要更新的特定目标的名称。

我的意图是让目标不再依赖于任何虚假目标。我想将所有虚假目标转换为具体的非虚假目标,以便每个目标的依赖关系树仅包含非虚假目标。然后,为了在 Perl 脚本中轻松访问各个目标,我将为其中的每一个添加一个新的虚假目标,除了提及具体目标作为其唯一依赖项之外什么都不做,并且只是在其构建配方中打印出回显。

我不太精通 make,所以我想问一下这是否会按预期工作,或者是否会产生意想不到的后果。

如果您首先创建所有具体目标,让它们依赖于其他具体目标,并且,这将按预期工作(并且是正确的方法) then 使用虚假目标抽象名称,以具体目标为先决条件。换句话说,具体的指标应该自己站起来,而不是靠假的。

顺便说一下,如果您愿意,您也可以将食谱留空(不需要 "dummy" echo)。