我有一个依赖于其他数据文件的数据文件,但生成脚本会在它们丢失时忽略。该脚本自动创建makefile,包括那些不存在的makefile - 在创建它们的情况下,重新创建依赖文件。
data: infile1.raw infile2.raw
touch $@
infile1.raw:
infile2.raw:
添加空规则可以避免错误,但会触发不必要的娱乐。
隐式规则有时会起作用,但不可靠 - %.raw:
会导致make抱怨没有规则来制作infile1.raw
目标。明确声明不需要使用%.raw:;
构建它会删除错误,但会再次导致重建。我希望避免使用诸如
data: $(wildcard infile*.raw)
因为很难以这种方式自动执行此操作,以至于许多文件都不匹配。
有没有办法实现,忽略缺少的依赖?
答案 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 $@
请注意,这不会检测到删除输入文件的情况(例如,如果您将所有输入文件连接在一起,则删除一个输入文件不会会导致目标被重建)。