Скачивание файлов с правилами Makefile - PullRequest
0 голосов
/ 13 февраля 2010

Я планировал что-то вроде:

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

Проблема, с которой я столкнулся, заключается в том, что, если я конвертирую URL-адреса с помощью somefunc, я теряю URL-адреса, если не могу, я не могу использовать его в качестве цели, чтобы избежать загрузки, когда он уже есть.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 13 февраля 2010

Если 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://?)

0 голосов
/ 13 февраля 2010

На данный момент, я не думаю, что вы можете сделать это напрямую с помощью make. Но вот решение, если вы хотите использовать некоторые сценарии:

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