Makefile:如果不存在则忽略先决条件

时间:2017-11-01 21:24:37

标签: makefile

我有一个依赖于其他数据文件的数据文件,但生成脚本会在它们丢失时忽略。该脚本自动创建makefile,包括那些不存在的makefile - 在创建它们的情况下,重新创建依赖文件。

data: infile1.raw infile2.raw
      touch $@
infile1.raw:
infile2.raw:

添加空规则可以避免错误,但会触发不必要的娱乐。

隐式规则有时会起作用,但不可靠 - %.raw:会导致make抱怨没有规则来制作infile1.raw目标。明确声明不需要使用%.raw:;构建它会删除错误,但会再次导致重建。我希望避免使用诸如

之类的通配符
data: $(wildcard infile*.raw)

因为很难以这种方式自动执行此操作,以至于许多文件都不匹配。

有没有办法实现,忽略缺少的依赖?

2 个答案:

答案 0 :(得分:2)

如果wildcard单独为您提供过多的虚假匹配,请将wildcard与白名单一起使用

whitelist := infile1.raw infile2.raw

data: $(filter $(whitelist),$(wildcard infile*.raw))

答案 1 :(得分:2)

根据@ user657267的回答,看来您可以简单地将wildcard与固定文件名一起使用:

data: $(wildcard infile1.raw) $(wildcard infile2.raw)
    touch $@

请注意,这不会检测到删除输入文件的情况(例如,如果您将所有输入文件连接在一起,则删除一个输入文件不会会导致目标被重建)。