make: text-function в зависимости - PullRequest
0 голосов
/ 18 октября 2011

Learning make, Как в следующем Makefile я могу определить зависимость %.tar.bz2 как somefile.tar.bz2?

Это было бы что-то вроде: %.tar.bz2: $(function_to_cut_from_end_till_/ %.tar.bz2) Но я не смог найти как это сделать в man make.

Я подхожу к этому не с той стороны?

source=http://example.net/somefile.tar.bz2
source:=$(subst :,\:,$(source))

.PHONY: download

download: $(source)

%.tar.bz2:
        @wget "$@"

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Чтобы получить часть имени файла имени цели в командах правила %.tar.bz2, вы можете использовать функцию notdir или переменную $ (@ D) .

Действительно, вы должны сделать так, чтобы имя цели соответствовало выходному файлу, чтобы make мог проверять наличие файла и не пытался загружать его заново при каждом запуске. Простой способ сделать это будет

source=somefile.tar.bz2

.PHONY: download

download: $(source)

%.tar.bz2:
        @wget "http://example.net/$@"

или, если у вас есть разные исходные архивы для загрузки из разных мест (что, я думаю, вы делаете, иначе зачем вообще использовать шаблонное правило?), Вы можете использовать переменную, специфичную для цели , чтобы сохраните URL-адрес для загрузки, например

source=somefile.tar.bz2 some-other-file.tar.bz2
somefile.tar.bz2: URL=http://example.net
some-other-file.tar.bz2: URL=http://example.org/foobar

.PHONY: download

download: $(source)

%.tar.bz2:
        @wget "$(URL)/$@"
0 голосов
/ 18 октября 2011

Ну, нет причин быть слишком сложным - хотя это и возможно, но было бы гораздо удобнее сделать это:

domain=http://example.net/
filename=somefile.tar.bz2
source=$(DOMAIN)$(FILENAME)

Тогда имя файла прямо здесь, чтобы использовать

Вы также можете попробовать

$(patsubst %/,,$(source))

Что должно удалить все до последнего слеша от $(source)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...