运行 现有目标之后的另一个目标
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
应该做你想做的。
想象一下,我们有一个目标为“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
:
$ 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
, andMakefile
, in that order.
因此,如果您愿意,也可以将其命名为 GNUmakefile
。用一个或另一个 运行 make foo
应该做你想做的。