如果clean_data
是单个文件,就让它依赖于所有数据文件:
cache/clean_data: data/*
scripts/clean_data
如果它是一个包含多个已清理文件的目录,最简单的方法是编写一个标记文件并让它依赖于您的数据文件:
cache/clean_data-stamp: data/*
scripts/clean_data
touch cache/clean_data-stamp
请注意,clean_data
如果一个数据文件发生更改,这将重新生成所有文件。如果您在数据和已清理文件之间存在一对一的映射,则可以使用更精细的方法。GNU Make 手册有一个很好的例子。这是一个改编:
DATAFILES:= $(wildcard data/*)
CACHEFILES:= $(patsubst data/%,cache/clean_data/%,$(DATAFILES))
cache/clean_data/% : data/%
scripts/clean_data --input $< --output $@
all: $(CACHEFILES)
在这里,我们使用通配符来获取data
. 然后我们使用patsubst将数据路径替换为缓存路径。我们告诉make
如何通过静态模式规则生成缓存文件,最后,我们定义一个目标all
来生成所有需要的缓存文件。
当然,您也可以CACHEFILES
在 Makefile ( ) 中明确列出您的内容,但如果可能的话CACHEFILES:= cache/clean_data/a cache/clean_data/b
,让其自动处理通常更方便。make
请注意,这个复杂的示例可能只适用于 GNU Make,而不适用于 Windows 的 nmake。有关更多信息,请参阅GNU Make Manual,它是满足您所有 Makefile 需求的绝佳资源。