Зависимость Makefile для неизвестных файлов в известной директории (для DocBook) - PullRequest
0 голосов
/ 14 июня 2009

Как часть сборки, я обрабатываю файл DocBook, который создает несколько файлов HTML (один файл на главу).

Я хочу постобработать эти HTML-файлы и скопировать их в другое место. Эти файлы зависят от источника DocBook, но я не могу заранее знать имена файлов (имена файлов также зависят от источника DocBook).

У меня есть правило, что вроде работает, если файлы уже сгенерированы:

www/manual/%.html: build/manual/%.html
   postprocess "$<" "$@"

но я не знаю, как сказать make генерировать их, если их еще нет. Если я просто добавлю правило для www/manual/index.html, постобработку получит только этот файл, а не все.

Полагаю, мне нужен makedepend для DocBook или, возможно, какой-нибудь изящный трюк с подстановочными знаками. Какое решение для этого?

Ответы [ 2 ]

1 голос
/ 15 июня 2009

Я собираюсь слепо предположить, что GNU Make здесь; в противном случае аналогичные методы должны применяться со слегка измененным синтаксисом.

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

А потом я бы поместил это правило в отдельный подфайл, , который вызывается рекурсивно

То есть, в вашем основном Makefile,


  build:
    # do the docbook processing
    $(MAKE) -f htmlprocessmakefile

Это Makefile увидит полный список созданных HTML-файлов.

0 голосов
/ 14 июня 2009

Вы пытаетесь написать правило типа "Если в каталоге manual вообще нет файлов, введите команду foo для их генерации"?

Одна из простых возможностей (хак, учитывая, что я не знаю, как использовать расширенный make-файл и не предлагаю тратить время на его изучение), заключается в том, что указанная команда foo не только создает имена файлов, которые вы не знаете заранее, но также для создания одного (возможно, пустого) файла, имя файла которого вы знаете заранее, и который затем вы можете использовать в качестве маркера для определения того, было ли выполнено правило.

...