Makefile:从数字序列生成目标

mba*_*ete 3 makefile gnu-make

我有兴趣从互联网上的某个位置下载年度数据。我有一个GetYearData.py执行此操作的 python 脚本,将年份和输出文件名作为命令行参数。我想一次在几年的数据上运行这个脚本;我想使用 Make,这样如果我更改开始或结束年份,我就不必重新下载所有数据。

我可以用一个非常简单的 Makefile 做一年:

data/YearData_2000.txt  :  GetYearData.py
  python $< --year 2000 --outfile $@
Run Code Online (Sandbox Code Playgroud)

但是,我想这样做一个循环(或类似的构造),以便在 bash 中的序列中的每一年YEARS=($(seq $(SYEAR) 1 $(EYEAR)))- 我传递--year $(Y)给我的脚本并为--outfile?

Mad*_*ist 8

尝试类似:

SYEAR = 2000
EYEAR = 2017

YEARS := $(shell seq $(SYEAR) 1 $(EYEAR))

all: $(patsubst %,data/YearData_%.txt,$(YEARS))

data/YearData_%.txt : GetYearData.py
        python $< --year $* --outfile $@
Run Code Online (Sandbox Code Playgroud)

如果需要SYEAR,您可以EYEAR在 make 命令行上覆盖和。