簡體   English   中英

使用Makefile規則下載文件

[英]Downloading files with Makefile rules

我正在計划類似:

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,我會丟失URL,如果不這樣做,我就不能將其用作目標,以避免已經存在時被下載。

有任何想法嗎?

如果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://嗎?)

在這一點上,我認為您不能直接使用make進行操作。 但是,如果您願意使用一些腳本,這是一個解決方案:

$(URLS):
    @for url in ${URLS}; do \                                               
        if [ ! -e $$(somefunc $${url}) ]; then \
            echo wget $${url}; \
            wget $${url}; \
        fi \
    done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM