规则名称作为先决条件的一部分

时间:2014-08-22 13:52:05

标签: makefile gnu-make

我有一个Makefile,可以从BibTex-File中提取几个作者的出版物,并将它们转换为HTML页面。我试图尽可能地创建Makefile,但现在我被卡住了。

这就是我现在所拥有的:

objects = sts-bib-*.bib
results = Author1 Author2

.PHONY : clean cleanall all $(results)

all : $(results)

$(results) : bib-$@.html

bib-%.bib :
  TMPDIR=. bibtex2html-1.96-osx-x86_64/bib2bib -c 'author : "$*"' -s '$$date' source.bib

bib-%.html : bib-%.bib
  TMPDIR=. bibtex2html-1.96-osx-x86_64/bibtex2html -d -r --nodoc --nobibsource --no-header --no-footer -o bib-$@.html bib-$@.bib

clean :
  -rm $(objects)

当我运行它时,make告诉我 all 没有任何事情要做。如果我为专用用户运行它,例如make Author1,它还告诉我,对于Author1,没有什么可以做的。我是否对目标的依赖性做了错误?我还尝试了$(results) : bib-%.html% : bib-%.html,结果相同。

我认为问题在于目标%(结果)的依赖性。我想要Using make target name in generated prerequisite之类的东西,但需要完整的目标名称。所以我尝试了% : % : sts-bib-%.html,这导致混合隐式和静态模式规则。

我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

静态模式规则是

<list of targets> : <pattern to extract stem from target> : <prereqs>

所以你需要使用:

$(results) : % : bib-%.html

而不是$(results) : bib-$@.html