【发布时间】:2012-04-05 04:54:31
【问题描述】:
我想学习如何在我的 makefile 目标的先决条件中重用 % 符号,假设目标是 X.pdf,而 prerequesite 在 X/X.tex。
详细来说,我目前有一个像这样的makefile:
all: foo.pdf
%.pdf: %.tex
pdflatex $*.tex
我还有一个文件foo.tex,当我输入make 时,它会通过运行pdflatex foo.tex 生成foo.pdf。
现在由于各种无法控制的原因,我的目录结构发生了变化:
my_dir
|- Makefile
|- foo
|- foo.tex
我想修改我的 Makefile,以便当它尝试生成 X.pdf 时,它会查找文件 X/X.tex。
我尝试了以下方法(我尝试输入 '%/%.tex' 来告诉它寻找 foo/foo.tex):
all: foo.pdf
%.pdf: %/%.tex
pdflatex $*/$*.tex
但是,这会产生:
No rule to make target `foo.pdf', needed by `all'. Stop.
%.pdf: $*/$*.tex 也是如此。
如果我将%/%.tex 更改为foo/%.tex,它会按预期工作,但我不想在那里硬编码foo,因为将来我会做all: foo.pdf bar.pdf,它应该寻找foo/foo.tex 和bar/bar.tex。
我对 Makefiles 相当陌生(经验仅限于根据我的需要修改其他人的文件),并且从未做过超过绝对基本的文件,所以如果有人可以给我一个有用的指针(我没有'真的不知道要在 Makefile 文档中搜索什么词 - 唯一看起来很有希望的是 % 和 $*,我无法开始工作)。
【问题讨论】:
-
这比应该的要难;处理通配符是 Make 非常不擅长的事情之一。可以做到,但很丑陋,所以如果@wisent 的解决方案足以满足您的目的,您可能应该这样做。