我有一个包含大量目标的Makefile,并且希望首先执行某个脚本,而不管调用了什么目标。我喜欢称其为全球先决条件。
我不想为脚本创建目标并将其设置为所有现有目标的前提条件(正如我所说的那样)。此外,其他人可能会在将来添加目标,而不会将我的脚本添加为目标的先决条件,因此全局先决条件会解决这个问题。
GNU-make是否提供实现此目的的方法?
答案 0 :(得分:3)
另一种方法:
-include dummy
.PHONY: dummy
dummy:
run-the-script
Make将始终尝试重建makefile尝试包含的任何文件(如果该文件已过期或不存在)。在这种情况下,没有这样的文件,构建它的规则将运行脚本,并且不执行其他任何操作。
答案 1 :(得分:0)
有一个解决方案,无需修改您现有的Makefile
(与Tripleee指出的答案的主要区别)。只需创建一个包含以下内容的makefile
:
.PHONY: all
all:
pre-script
@$(MAKE) -f Makefile --no-print-directory $(MAKECMDGOALS) MAKE='$(MAKE) -f Makefile'
post-script
$(MAKECMDGOALS): all ;
唯一的缺点是,即使没有其他操作,前脚本和后脚本也将始终运行。但是,如果您使用--dry-run
选项之一调用make,则它们将不会运行(与三位用户指出的答案的其他区别)。