假设以下文件与makefile位于同一目录中:
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 <...>
但是,不在通配符函数中评估百分比。有人知道如何解决这个问题吗?
答案 0 :(得分:1)
在模式匹配规则之前应用函数,因此不能在glob中使用%。
可能有更好的解决方案,但我提出了:
.dep-%.pdf: %.tex
@bash -c 'shopt -s nullglob; for x in $*.*.dot; do \
echo "$*.pdf: $$x.tex"; \
done' > $@
PDFS := $(patsubst %.tex,%.pdf,$(wildcard [0-9][0-9].tex))
include $(patsubst %,.dep-%,$(PDFS))
%.pdf: %.tex | .dep-%.pdf
只要您不添加或创建X。*。点文件而不修改X.tex文件,这应该可行。