Как обрабатывать неизвестные зависимости в Makefile, которые обнаруживаются динамически? - PullRequest
0 голосов
/ 11 декабря 2018

Допустим, мой Makefile создает сайт.Я пишу index.html содержащие ресурсы, например:

<html>
  <body><img src="asset/foo.img"/></body>
</html>

Теперь я хочу написать правило для создания ZIP-архива, который содержит HTML, а также его активы.

Iнаписать скрипт для разбора атрибутов src=, но что мне с ним делать?
Если я добавлю это в рецепт, но в этот момент правила Makefile изменить нельзя.
Если я добавлюэто в команде $(shell ...), тогда он должен будет запускаться каждый раз, когда Makefile анализируется, даже если пользователь выполняет clean или что-то в этом роде.

Как правильно обрабатывать такой сценарий

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

На самом деле, я думаю, что я сам все понял.Решение - это дополнительный вызов к $(MAKE) - фактически, его основное отличие от include заключается в том, что это происходит во время выполнения рецепта, а не во время синтаксического анализа.

0 голосов
/ 12 декабря 2018

Кажется, я скучаю по твоей проблеме.Разве дерево зависимостей вашей ситуации не выглядит так:

my_page.html   image1.bmp    image2.bmp
  |    |           |            |
  1    2           2            2
  |    |           |            |
  |     \          |           /
  |      \         |          /
  |       \        |         /
  |        \       |        /
  |         \      |       /
  |          \     |      /
depend.dep    archive.zip

, где «1» - это правило, которое сканирует my_page.html для всех активов и записывает их обратно в depend.dep (илисам makefile, который не меняет решение) и "2" обновляет zip-файл измененными файлами-членами?Так как make пытается переделать depend.dep (или makefile сам) перед любым другим правилом, у вас всегда есть актуальный список зависимостей при запуске make-run, который будет действовать точно так же, как ваша команда: add/ обновить участников до archive.zip, если они новее.Я говорю это снова: повторный разбор my_page.html, если он изменился относительно зависимостей, является шагом ноль в пробном запуске, если существует зависимость к файлу, который include d или makefile сама.

0 голосов
/ 11 декабря 2018

Примерно так, может быть:

assets := $(shell ./myscript index.html)

myzip.zip: index.html $(assets)
    zip $@ $^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...