GNU make的全局先决条件-是否可能

时间:2018-10-09 10:13:32

标签: makefile gnu-make

我有一个包含大量目标的Makefile,并且希望首先执行某个脚本,而不管调用了什么目标。我喜欢称其为全球先决条件。

我不想为脚本创建目标并将其设置为所有现有目标的前提条件(正如我所说的那样)。此外,其他人可能会在将来添加目标,而不会将我的脚本添加为目标的先决条件,因此全局先决条件会解决这个问题。

GNU-make是否提供实现此目的的方法?

2 个答案:

答案 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,则它们将不会运行(与三位用户指出的答案的其他区别)。