我正在计划类似的事情:
URLS=www.host.com/file1.tar.gz www.host2.com/file2.tar.gz
$(somefunc $URLS): #somefunc produces downloads/file1.tar.gz downloads/file2.tar.gz
mkdir -P downloads
wget whatever # I can't get the real url here because the targets don't contain the full url anymore
myproject: $(somefunc URLS)
#Files should already be in downloads/ here
我遇到的问题是,如果我使用somefunc转换URL,我会丢失网址,如果我不这样做,我就无法将其用作目标,以避免在已经存在的情况下被下载。
有什么想法吗?
答案 0 :(得分:1)
如果somefunc
仅修改路径,而不是实际文件名,并且没有重复项,则可以尝试在$(URLS)
中搜索原始文件名。
也许是这样的? (另)
$(somefunc $URLS): #somefunc produces downloads/file1.tar.gz downloads/file2.tar.gz
mkdir -p $(dir $@)
wget $(filter $(addprefix %/,$(notdir $@)),$(URLS)) -O $@
$(notdir $@)
评估其中一个目标为file1.tar.gz
。$(addprefix %/,file1.tar.gz)
评估为%/file1.tar.gz
$(filter %/file1.tar.gz,www.host.com/file1.tar.gz www.host2.com/file2.tar.gz)
评估为www.host.com/file1.tar.gz
。(大概你也想要http://
吗?)
答案 1 :(得分:0)
此时,我认为你不能直接用make来做。但是,如果您愿意使用某些脚本,这是一个解决方案:
$(URLS):
@for url in ${URLS}; do \
if [ ! -e $$(somefunc $${url}) ]; then \
echo wget $${url}; \
wget $${url}; \
fi \
done