我们有一个(非常复杂的)构建系统,我目前正在试图清理和简化一些。它以一个Perl脚本为中心,该脚本设置各种相互依赖的环境变量,然后启动make。调用什么目标make取决于传递给Perl脚本的参数、其他一些环境变量和当前的月亮阶段。
困扰我的是,我们的makefile包含了太多的虚假目标,这导致目标不断被重建,即使没有必要,这是一个巨大的时间浪费。目标(直接或间接)依赖于大量的虚假目标,而且由于虚假目标总是被认为是“过时的”,许多东西被不必要地更新。
出现这么多虚假目标的原因是,我们的makefile从来没有被直接调用过,但总是通过我前面提到的Perl脚本调用的,并且通过拥有虚假的目标,Perl脚本不需要知道用户想要更新的特定目标的确切路径名称。
我的意图是不再让目标依赖于任何虚假的目标。我希望将所有虚假目标转换为具体的、非虚假的目标,以便每个目标的依赖关系树只包含非虚假目标。然后,为了便于在Perl脚本中访问各个目标,我将为每个目标添加一个新的虚假目标,它只会将具体目标作为其唯一的依赖项,并在其构建配方中打印出一个回声。
我对make不太熟悉,所以我想问一下,这是否会按预期工作,或者是否会产生意想不到的后果。
发布于 2016-09-19 07:55:27
这将按预期工作(并且是正确的方法),前提是首先创建所有具体目标,让它们依赖于其他具体目标,然后使用以具体目标为先决条件的虚假目标来抽象名称。换句话说,具体的目标应该自己站起来,而不是靠假的。
顺便说一句,如果你愿意的话,你也可以让菜谱空着(不需要一个“虚拟的”echo)。
https://stackoverflow.com/questions/39567357
复制相似问题