Сайт, который я создаю из источников, состоит в основном из двух групп файлов.Во-первых, набор HTML-файлов, которые содержат инструкции по обработке PHP, которые я обрабатываю с помощью PHP во время сборки как часть создания локализованных файлов разметки.Иными словами, HTML-файл из исходного каталога обрабатывается с помощью PHP, который направляет вывод в другой HTML-файл в каталоге сборки с тем же именем.
Обработка указанных файлов HTML включает собственный набор файлов PHP.Эти файлы содержат фактические тексты локализации, которые заменяют заполнители в исходных файлах HTML.Эти файлы PHP, в свою очередь, генерируются из соответствующих файлов XML.Это потому, что мы выбрали XML в качестве исходного носителя для текстов локализации, поскольку этот проект является частью более крупного проекта, который довольно неоднороден в отношении используемой технологии, и поэтому мы использовали XML, чтобы помочь себе в быстром переводе.
Во-вторых, и наконец, у меня есть вторая группа файлов, которые мы можем назвать «статическими» активами, которые просто необходимо дословно скопировать из источника в каталог сборки.
Я пытаюсь написать краткий make-файл для использования в GNU make, который правильно выражает зависимости.В лучшем случае я выполняю половину, в то время как make
, кажется, играет со мной шутки, которые меня смущают.
Краткая легенда для make-файла, приведенного ниже, вы можете пропустить это, если действительно быстро разберетесь:
- Процесс, который преобразует данные локализации из формата XML в код, который PHP может
include
, вызывается с помощью xml_to_php_res
.Файлы XML находятся в текущем (исходном) каталоге и соответствуют *.res.xml
. - Вызов PHP для
include
файлов локализации и обработки файлов HTML абстрагируется в сценарии process_html
DESTDIR
переменная make используется для указания префикса каталога сборки.Поскольку это префикс, он обычно заканчивается /
, когда он определен.По понятным причинам он не может соответствовать исходному каталогу. - Исходный каталог считается текущим каталогом
- Файлы локализации PHP, созданные из файлов XML, соответствуют
$(DESTDIR)resources/*.php
.Я не выбрасываю их после использования, потому что 1) хорошо их кэшировать и 2) они могут использоваться во время выполнения, если это будет сочтено необходимым.Я полагаю, это то, что make
называет "промежуточными" предпосылками?
Makefile:
php_pp_def_files := $(patsubst ./%.res.xml,$(DESTDIR)resources/%.php,$(shell find -name \*.res.xml))
$(DESTDIR)resources/%.php: %.res.xml
./xml_to_php_res $< > $@
$(DESTDIR)%.html: %.html $(php_pp_def_files) # Each built HTML file depends on corresponding source HTML file and all PHP localization definition files
./process_html $< > $@
$(DESTDIR)%: %
$(INSTALL_DATA) -D $< $@
Последнее правило, кажется, мешает моим намерениям.Кажется, именно так устроен make
- если не существует каких-либо предпосылок для второго правила, он просто пропускает его и вместо этого рассматривает третье правило.Это совсем не то, что мне нужно.
Я пропустил цель all
, потому что make-файл даже не работает для произвольных отдельных файлов.
Я думаю, что мне не хватает каких-то первостепенных знаний о том, как выполнять поиск и соответствует правилам и т. Д. Я практически уже перевернул руководство в первый раз, но оно довольно загадочное, и я злился, прежде чем мне удалось вздрогнутьэто: /