Makefile GNU make:在所有其他目标之后运行目标,而不考虑失败?

Makefile GNU make:在所有其他目标之后运行目标,而不考虑失败?,makefile,gnu-make,Makefile,Gnu Make,我有一个生成文件,其中包含一些生成一些数据的目标(比如data1到dataN,所有数据都依赖于这些目标),还有一个prettify目标,它迭代输出并创建一个漂亮的报告。(注意:有许多dataN目标,并且生成文件是机器生成的) 一些dataX目标偶尔会失败,但我还是想运行prettify,因此prettify不依赖于alldata 有没有一种方法可以在一次调用make中运行相当于make-kalldata | | make prettify,使make尽最大努力构建所有数据,然后在生成的任何数据上

我有一个生成文件,其中包含一些生成一些数据的目标(比如
data1
dataN
,所有数据都依赖于这些目标),还有一个
prettify
目标,它迭代输出并创建一个漂亮的报告。(注意:有许多
dataN
目标,并且生成文件是机器生成的)

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


有没有一种方法可以在一次调用make中运行相当于
make-kalldata | | make prettify
,使make尽最大努力构建所有数据,然后在生成的任何数据上构建我的报告?

make通常在命令失败时退出。如果在失败的命令后面加上“| | true”,make将继续执行,这意味着您的修饰也将被执行

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

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

或者你可以。

也许是因为
-command
更简洁?(我故意漏掉了
@
,这是一个反模式IMHO。)