【问题标题】:Can GNU make execute a rule whenever an error occurs?GNU make 可以在发生错误时执行规则吗?
【发布时间】:2014-02-02 18:38:30
【问题描述】:

这与Can a Makefile execute code ONLY when an error has occurred?略有不同。

我想要一个规则或特殊目标,只要发生错误(独立于给定目标;不更改每个目标的规则,因为另一个答案似乎暗示了 || 运算符)。

dmake 中有特殊目标 .ERROR只要检测到错误情况就会执行。 GNU make 有没有类似的东西?

(我仍在使用 GNU make 3.81,但我也没有在新的 GNU make 4.0 的文档中找到任何内容)

【问题讨论】:

  • 不,GNU make 不支持这个。如果您使用递归来包装“main”make,然后在失败时运行命令,则可以做到这一点,但仅此而已。

标签: error-handling makefile gnu-make dmake


【解决方案1】:

Gnu 不明确支持它,但有办法破解几乎任何东西。如果任何一个 make 失败,则 Make 返回 1。这意味着如果第一个 make 失败,您可以在命令行上使用错误规则重新运行 make:

make || make error_targ

当然,我假设您只是想将增加的复杂性放在 makefile 本身中。如果是这种情况,您可以创建一个递归 make 文件:

all: 
     $(MAKE) normal_targ || $(MAKE) error_targ

normal_targ:
      ... normal make rules ...

error_targ:
      ... other make rules ...

这将导致 makefile 尝试构建 normal_targ,如果失败,它将运行 error_targ。对于没有经验的人来说,阅读 makefile 有点困难,但它将所有逻辑放在一个地方。

【讨论】:

  • 如何从normal_targ 获取错误代码/消息,以便error_targ 可以显示一些包含错误描述的自定义错误消息?
  • 这简直是天才
  • @JHH 也许你可以通过使用 shell $? 变量来做到这一点,当 make 失败时它会在这个变量上返回一个错误代码,所以你可以做类似 $(MAKE) normal_targ || echo $$? && $(MAKE) error_targ 的事情(这只会打印错误值,但您可以使用此值打印自定义消息)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
相关资源
最近更新 更多