【问题标题】:How to add a dependency in makefile only if a recipe (or another dependency) fails?仅当配方(或其他依赖项)失败时如何在 makefile 中添加依赖项?
【发布时间】:2014-01-10 03:23:26
【问题描述】:

我想用 gmake 实现以下目标:

让 A 依赖于 X。如果 X 通过,我们就完成了。否则 A 必须依赖于 B(它有一个配方和额外的依赖项)。我也希望能够并行运行make,所以不能从A: X B开始

我需要类似的东西:

X:
    $(run_recipe1_and_set_pass_or_fail)

B: B1 B2
    $(run_recipe2)

A: X
    if "X.failed" "evaluate_target(B)" ""

我还想避免在此过程中运行另一个 make - 这会减慢速度。

【问题讨论】:

  • 如果不调用另一个 make,您将无法执行此操作。
  • Make 在 执行任何规则之前创建依赖关系图,因此您所要求的无法完成,但调用另一个 make 确实不会减慢很多速度。
  • 那么,evaluate_target(B) 真的应该是对某个 makefile 的 make 调用来生成 B 吗?

标签: makefile dependencies gnu-make


【解决方案1】:

是的,如果我将 A 配方更改为类似

A: X
    $(if -e X.failed,make $(MFLAGS) B,)

它有效,而且当 B 完成的工作很重要时,它在时间上也不错。

【讨论】:

  • 请注意,如果make 知道构建X 失败,它将不会执行显示的操作。因此,它必须看起来好像 X 已成功构建,即使它失败了。
  • 两个小 cmets:首先使用 $(MAKE) 而不是 make,然后不推荐使用 MFFLAGS(使用 MAKEFLAGS 变量自动传递值)。
猜你喜欢
  • 2013-04-17
  • 2016-09-14
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 2018-11-28
  • 2019-12-13
  • 1970-01-01
相关资源
最近更新 更多