2013-11-06 4 views
3

Предположим, что следующие файлы находятся в том же каталоге, что и Makefile:.Makefile, Regex и несколько зависимостей

01.1.dot 
01.2.dot 
02.1.dot 
03.1.dot 
03.2.dot 
03.3.dot 

Это означает, что у нас есть файлы вида [0-9] [0-9] [0 -9] .dot

Кроме того, Makefile содержит следующую цель:

%.dot.tex: %.dot 
    dot2tex <...> 

Теперь я хотел бы создать цель, которая зависит от файлов вида [0-9] [0-9] .tex, и они также должны зависеть от всех файлов формы [ 0-9] [0-9]. *. Dot.tex, так что первые две цифры совпадают. Например, make 03.pdf должен зависеть от 03.tex, 03.1.dot.tex, 03.2.dot.tex и 03.3.dot.tex. Я придумал следующее:

%.pdf: %.tex $(addsuffix .tex,$(wildcard %.*.dot)) 
     @echo $? 
     pdflatex <...> 

Однако процент не оценивается в подстановочной кнопке. У кого-то есть идея, как это решить?

ответ

1

Функции применяются перед правилами сопоставления шаблонов, поэтому вы не можете использовать% в глобусе.

Существует, вероятно, лучшее решение, но я придумал:..

.dep-%.pdf: %.tex 
    @bash -c 'shopt -s nullglob; for x in $*.*.dot; do \ 
     echo "$*.pdf: $$x.tex"; \ 
    done' > [email protected] 
PDFS := $(patsubst %.tex,%.pdf,$(wildcard [0-9][0-9].tex)) 
include $(patsubst %,.dep-%,$(PDFS)) 
%.pdf: %.tex | .dep-%.pdf 

До тех пор, пока вы не добавить или создать X * точечные файлы без изменения также X.tex файлов, это должно Работа.

Смежные вопросы