2014-01-10 34 views
0

我想用gmake实现以下功能:如何仅在配方(或其他依赖项)失败时才在makefile中添加依赖项?

有依赖于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)" "" 

我也想避免运行的另一个使这个过程中 - 这将慢下来。

+1

你不能在不调用其他make的情况下执行此操作。 – MadScientist

+2

在*执行任何规则之前创建依赖关系图*,因此您提出的问题无法完成,但调用另一个方法确实不会减慢速度。 – Beta

+0

那么,应该评估_target(B)真的是一个make make调用make来做B吗? –

回答

1

是的,如果我改变一个配方类似

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

它的工作原理,当用B所做的工作是显著它不是不好的时候,明智的。

+1

请注意,如果'make'意识到构建'X'失败,它将不会执行所示的操作。所以,即使它失败了,它也必须显示成'X'已经成功构建。 –

+0

两个小评论:首先使用$(MAKE)而不是make,接下来,不推荐使用MFFLAGS(使用MAKEFLAGS变量自动传递值)。 – John