我有一个包含生成某些数据的目标(比如data1
到dataN
,alldata
所依赖的)的makefile,以及一个迭代的prettify
目标输出并创建一个漂亮的报告。 (注意:有很多dataN
目标,而makefile是机器生成的)
某些dataX
目标偶尔会失败,但我仍想运行prettify
,因此prettify
不依赖于alldata
。
有没有办法在make的单个调用中运行等效的make -k alldata || make prettify
,以便make尽最大努力构建所有数据,然后根据所做的任何事情构建我的报告?
答案 0 :(得分:2)
你可以prepend the recipes for the dataX targets with a ‘-’,
或者你可以list the dataX targets as prerequisites of the special target .IGNORE
。
答案 1 :(得分:1)
命令失败时,通常会发出罢工声。如果在命令后面加上“|| true”,那么make将继续执行,这意味着你的美化也将被执行。
答案 2 :(得分:1)
您可以使用您喜欢的任何控制逻辑编写递归目标。这不会阻止某人从命令行运行目标,因此您无法强制执行逻辑,但这对于方便目标来说很好。这样的事情,也许是:
.PHONY: all
all:
$(MAKE) -k -$(MAKEFLAGS) alldata \
; rc=$$? \
; $(MAKE) $(MAKEFLAGS) prettify \
; exit $$rc