运行 现有目标之后的另一个目标

Running another target after existing one

想象一下,我们有一个目标为“foo”的现有(不可修改的)Makefile,以及另一个我可以修改的包含的 Makefile。我想添加一个名为“运行after”的新目标,它将在“foo”为 运行 之后执行。所以用户一直调用“foo”,之后一些额外的代码应该是运行。

实现此目的的通常方法是重命名原始名称并执行以下操作:

foo_old:
  ...
foo: foo_old
  # run some code or call another target explicitly
  $(MAKE) runafter

但这只有在您可以重命名 foo 时才有效。如果没有,我如何扩展现有目标的行为?我尝试用 foo: ... 做的所有事情显然都会导致覆盖旧的 foo 目标(带有警告)。但我只想 运行 之后再写一些代码!

我看不到如何从包含的 makefile 中执行此操作,但是如果您使用 GNU make,那么您可以添加一个名为 makefile 而不是 Makefile:

的 makefile
$ cat makefile
foo:
    $(MAKE) -f Makefile $@
    $(MAKE) runafter

runafter:
    ...

来自 GNU make 手册页:

If no -f option is present, make will look for the makefiles GNUmakefile, makefile, and Makefile, in that order.

因此,如果您愿意,也可以将其命名为 GNUmakefile。用一个或另一个 运行 make foo 应该做你想做的。