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

Makefile 使用虚假目标作为目标别名,makefile,gnu-make,Makefile,Gnu Make,我们有一个(非常复杂的)构建系统,我目前正在尝试清理和简化它。它以Perl脚本为中心,该脚本设置各种相互依赖的环境变量,然后启动make。调用哪个targetmake取决于传递给Perl脚本的参数、一些其他环境变量和当前阶段 困扰我的是,我们的makefile包含了太多的虚假目标,这导致目标不断被重建,即使没有必要,这是一个巨大的时间浪费。目标(直接或间接)依赖于大量虚假目标,而且由于虚假目标总是被视为“过时”,许多内容都会被不必要地更新 有这么多虚假目标的原因是,我们的makefile从未被直

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

困扰我的是,我们的makefile包含了太多的虚假目标,这导致目标不断被重建,即使没有必要,这是一个巨大的时间浪费。目标(直接或间接)依赖于大量虚假目标,而且由于虚假目标总是被视为“过时”,许多内容都会被不必要地更新

有这么多虚假目标的原因是,我们的makefile从未被直接调用,而是始终通过我前面提到的Perl脚本进行调用,并且通过使用虚假目标,Perl脚本不必知道用户想要更新的特定目标的确切路径名

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


我不太精通
make
,所以我想问一下,这是否会像预期的那样起作用,或者是否会产生意外的后果。

这会像预期的那样起作用(而且是正确的方法),前提是你先创建所有具体目标,让它们取决于其他具体目标,然后使用虚假目标和具体目标作为先决条件,将这些名称抽象出来。换言之,具体目标应该自己站起来,而不是依靠骗子


顺便说一句,如果愿意,您也可以将配方留空(不需要“虚拟”
echo
)。

这将按预期工作(并且是正确的方法),前提是您首先创建所有具体目标,并根据其他具体目标设置它们,然后使用虚假目标和具体目标作为先决条件,将这些名称抽象出来。换言之,具体目标应该自己站起来,而不是依靠骗子


顺便说一句,如果你愿意,你也可以将配方留空(不需要“虚拟”
echo
)。

哦,我不知道我可以有一个没有任何配方的目标。:)哦,我根本不知道没有任何配方我就可以有一个目标