我有一个makefile,用于从Web获取一些数据集并将它们解压缩到文件夹中(由存档名称给出)。不幸的是,网站上的档案分组在一个文件夹结构中。例如,如果我想要dataset.tar.gz
,它是集合DIR1
的一部分,我会使用:www.example.com/DIR1/dataset.tar.gz
调用wget。
然后将其下载到dataset.tar.gz
,然后我可以使用tar -xzf
进行提取。我的makefile目前是:
URL = www.example.com
FILES = DIR1/something.url DIR2/another.url
FOLDERS = $(notdir $(patsubst %.url, %, $(FILES)) )
%.url: # do nothing
%.tar.gz : %.url
wget -q $(URL)/$<
% : %.tar.gz
tar -xzf $<
all: $(FOLDERS)
不幸的是,规则%.tar.gz : %.url
的目标并未解析为(例如)something.tar.gz
,而是解析为DIR1/something.tar.gz
,即使它产生了预期的文件。
当我重新运行makefile时会出现问题,因为它没有检测到something.tar.gz
(因为它正在寻找DIR1/something.tar.gz
),并重新下载数据集,浪费时间和带宽。
有没有办法从makefile目标中删除前缀/目录,即从规则DIR1
中删除%.tar.gz : %.url
,以便makefile正确检查是否满足?