【问题标题】:GNU make: run a target after all others, regardless of failures?GNU make:在所有其他人之后运行一个目标,而不考虑失败?
【发布时间】:2011-10-15 07:36:04
【问题描述】:

我有一个生成一些数据的带有一些目标的makefile(比如data1dataNalldata 依赖于它)和一个prettify 目标,它迭代输出并创建一个漂亮的报告。 (注意:有很多dataN 目标,makefile 是机器生成的)

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

有没有办法在一次 make 调用中运行相当于 make -k alldata || make prettify 的方法,从而使 make 尽最大努力构建所有数据,然后根据所生成的内容构建我的报告?

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 也许是因为-command 这样做更简洁? (我故意省略了@;恕我直言,这是一个反模式。)
      猜你喜欢
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      相关资源
      最近更新 更多