Я использую GNU Make на Arch Linux для создания PDF-файлов из исходных файлов LilyPond. У меня есть структура каталогов следующим образом:
scores/
├── makefile
├── out
│ ├── others-songs
│ │ ├── ...
│ │ ├── ...
│ │ └── 失恋阵线联盟
│ │ ├── 失恋阵线联盟.edition.log
│ │ ├── 失恋阵线联盟.oll.log
│ │ └── 失恋阵线联盟.pdf
│ └── ...
├── src
│ ├── others-songs
│ │ ├── ...
│ │ ├── ...
│ │ └── 失恋阵线联盟
│ │ ├── chorus.ily
│ │ ├── verse.ily
│ │ ├── words.ily
│ │ └── 失恋阵线联盟.ly
│ └── ...
PDF-файлы в каталоге out
зависят от файлов .ily
и .ly
в соответствующем каталоге в src
. Следующее неявное шаблонное правило работает, если файл .ly
изменен, но не если любой из других файлов:
LY = $(shell find src -iname '*.ly')
PDF = $(subst src,out,$(LY:.ly=.pdf))
pdf: $(PDF)
out/%.pdf: src/%.ly
@mkdir -p $(dir $@)
@lilypond --include=$(lib) \
-dpoint-and-click=\#f \
-o $(basename $@) $<
Я пытался сделать несколько разных вещей, например, добавить $(<D)*.ily
к предварительным условиям, но это не увенчалось успехом. Я обратился к GNU make manual онлайн за помощью, но я не нашел ничего такого, что я мог бы применить к моей конкретной ситуации.
Как я могу написать шаблонное правило, чтобы каждый PDF-файл зависел от всех файлов в соответствующем соответствующем исходном каталоге?
EDIT
Возможно, я не был достаточно ясен с моим первым вопросом. Мне нужно поведение, если какой-либо из файлов в исходных каталогах изменяется, соответствующий PDF обновляется. Например, если chorus.ily
изменено, то 失恋阵线联盟.ly
будет сделано.