GNU make:在所有其他人之后运行目标,无论失败?

时间:2011-10-14 19:06:57

标签: makefile gnu-make

我有一个包含生成某些数据的目标(比如data1dataNalldata所依赖的)的makefile,以及一个迭代的prettify目标输出并创建一个漂亮的报告。 (注意:有很多dataN目标,而makefile是机器生成的)

某些dataX目标偶尔会失败,但我仍想运行prettify,因此prettify不依赖于alldata

有没有办法在make的单个调用中运行等效的make -k alldata || make prettify,以便make尽最大努力构建所有数据,然后根据所做的任何事情构建我的报告?

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

命令失败时,通常会发出罢工声。如果在命令后面加上“|| true”,那么make将继续执行,这意味着你的美化也将被执行。

答案 2 :(得分:1)

您可以使用您喜欢的任何控制逻辑编写递归目标。这不会阻止某人从命令行运行目标,因此您无法强制执行逻辑,但这对于方便目标来说很好。这样的事情,也许是:

.PHONY: all
all:
        $(MAKE) -k -$(MAKEFLAGS) alldata \
        ; rc=$$? \
        ; $(MAKE) $(MAKEFLAGS) prettify \
        ; exit $$rc