Я новичок в make, и я пытаюсь использовать его для развертывания некоторых файлов javascript. Я долго боролся со следующей проблемой, но безуспешно.
Моя структура каталогов выглядит следующим образом:
helpers/
foo/
foo.js
test/
test1.js
test2.js
...
bar/
bar.js
test/
test1.js
test2.js
...
other helpers...
distrib/
files ready for distribution
other stuff...
Мой make-файл должен содержать, среди прочего, помощников. Для каждого помощника foo
я хочу создать под дистрибутивом следующие файлы: foo-version.js
, foo-version-uncommented.js
, foo-version-packed.js
и foo-version-tests.zip
. Первые три получаются с помощью foo.js, соответственно, в виде копии, путем удаления комментариев и запуска миниатора javascript. У меня уже есть команды для выполнения этих задач.
Номер версии следует читать в комментариях к самому файлу, что я легко могу сделать с
def version
$(shell cat $1 | grep @version | sed -e"s/.*version *//")
endef
Моя проблема в том, что такие цели, как foo-version.js
, являются динамическими, поскольку они зависят от номера версии, который читается при запуске make. Я пытался использовать шаблоны, но мне не удалось сделать эту работу. Проблема в том, что что-то подобное не будет работать
helpers := foo bar
helpers: $(helpers)
$(helpers): %: $(call version, %)
потому что второй% не раскрывается при вызове макроса, но используется буквально.
Мне нужно иметь возможность make helpers
собрать всех помощников или make foo
собрать одного. Вторым шагом будет удаление всех файлов в distrib
с меньшим номером версии. Есть идеи как это сделать?
В качестве дополнительного вопроса: будет ли такая задача проще с другим инструментом сборки? Я не эксперт, и, возможно, стоит учиться чему-то другому.