Make:获取另一个目标内的依赖项

时间:2014-05-20 09:41:33

标签: makefile

我经常发现自己试图将目标(Target1)的依赖性引用到另一个目标(Target2)中。

考虑以下Makefile。 $(deps target-name)函数有多好!

Rule1 : file1 file2 file3
    echo $^ # Careful, these are whitespaces, not a tab !

Rule2 : file4 file5 file6
    echo $^ # Careful, these are whitespaces, not a tab !

clean-Rule-1-2 : 
    rm $(deps Rule1) $(deps Rule2)   # Careful, these are whitespaces, not a tab !

我发现this链接提到可以建立自己的依赖列表,但看起来相当乏味。

是否有人有更好的解决方案(假设没有在Makefile中本机实现)和/或引用此问题的工作流提示?

1 个答案:

答案 0 :(得分:2)

为什么要列出clean类型规则的先决条件?如果这些依赖关系已经过时,那只会强制构建这些依赖关系,只会再次删除它们。

没有办法做你想做的事,因为不可能保持一致。例如,您的规则可以这样写:

Rule1 : file1 file2 file3
        echo $^ # Careful, these are whitespaces, not a tab !

clean-Rule-1-2 : $(deps Rule1)
        rm $^   # Careful, these are whitespaces, not a tab !

Rule1 : file10 file11 file12

糟糕!当$(deps ...)扩展时,make不知道额外的三个先决条件,因此他们不会被列出。并且这甚至没有考虑隐式规则,make在解析makefile时不知道完整的先决条件列表是什么。它只会在尝试构建目标时计算它们。

您没有给出您想要做的事情的真实示例,但通常编写makefile的方式是您将先决条件放入变量中,然后您可以在多个位置使用变量。