我们有一个(非常复杂的)构建系统,我现在正在尝试清理并简化一点。它以Perl脚本为中心,设置各种相互依赖的环境变量,然后启动make
。调用的目标make
取决于传递给Perl脚本的参数,一些其他环境变量和当前的月相。
让我烦恼的是,我们的makefile包含太多虚假目标,这导致目标不断被重建,即使没有必要,这是一个巨大的浪费时间。目标(直接或间接)取决于大量虚假目标,并且由于虚假目标始终被视为“过时”,因此不必要地更新许多内容。
有这么多虚假目标的原因是我们的makefile永远不会被直接调用,但总是通过我之前提到过的Perl脚本,并且通过伪造目标,Perl脚本不必知道确切的路径名。用户想要更新的特定目标。
我的意图是不再有任何目标取决于任何虚假的目标。我想将所有虚假目标转换为具体的非虚假目标,以便每个目标的依赖树只包含非伪目标。然后,为了在Perl脚本中轻松访问各个目标,我将为每个目标添加一个新的虚假目标,除了提及具体目标作为其唯一依赖关系并在其构建配方中打印出回声之外什么都不做。
我对make
并不太熟悉,所以我想问一下这是否会按预期运作,或是否会产生意想不到的后果。
答案 0 :(得分:2)
这将按预期工作(并且是正确的方法),前提是您首先创建所有具体目标,根据其他具体目标使用它们,然后 < / em>使用虚假目标将具体的名称抽象出去作为先决条件。换句话说,具体的目标应该自己站起来而不依赖于小马。
顺便说一句,如果你愿意,也可以将食谱留空(不需要“假”echo
)。