我有一个makefile,可以从一个BibTex文件中为不同的作者创建HTML发布列表。导出使用bibtex2html完成,就像一个魅力。但我坚持规则命名。我希望makefile尽可能通用,只有在新同事开始或有人完成博士学位时才能调整结果列表。
工作流程如下:
results
中所有作者的出版物提取到单独的文件中:`bib2bib -c'作者:" $ *"' bib.bib' bibtex2html -d -r -o bib-$@.html bib-$@.bib
这是我遇到的当前makefile:
objects = bib-*.bib
results = Author1 Author2
.PHONY : clean cleanall all $(results)
.INTERMEDIATE : bib-*.bib
all : $(results)
$(results) : % : bib-%.html
bib-%.bib :
TMPDIR=. bib2bib -c 'author : "$*"' bib.bib
bib-%.html : %.html : %.bib
TMPDIR=. bibtex2html -d -r -o bib-$@.html bib-$@.bib
#Left the clean and cleanall targets out to shorten the code snippet
现在我用简单的make
调用这个makefile,它执行所有目标。这将调用$(result)
目标,该目标为结果中的每个作者调用bib - %。html目标。
这就出现了问题:调用时,使用错误混合隐式和静态模式规则来停止。
我想要做的是将规则名称与静态模式%.html一起使用,并将其转换为先决条件%.bib。但显然,我做错了什么。任何帮助表示赞赏。
答案 0 :(得分:3)
在这个makefile中有几个错误 - 或者至少是奇怪的。你的问题并不完全清楚,所以有些猜测是必要的。
首先,尝试使用简单诊断命令的规则,以使序列正确。我想这就是你想要的:
bib-%.bib :
@echo trying to build $@
bib-%.html : bib-%.bib
@echo trying to build $@ after $<
然后完成一条规则并验证它是否符合您的要求:
bib-%.bib :
TMPDIR=. bibtex2html-1.96-osx-x86_64/bib2bib -c 'author : "$*"' -s '$$date' bib.bib
bib-%.html : bib-%.bib
@echo trying to build $@ after $<
然后另一个。您在html规则中使用自动变量很奇怪,我怀疑这更接近您的意图:
bib-%.bib :
TMPDIR=. bibtex2html-1.96-osx-x86_64/bib2bib -c 'author : "$*"' -s '$$date' bib.bib
bib-%.html : bib-%.bib
TMPDIR=. bibtex2html-1.96-osx-x86_64/bibtex2html -d -r --nodoc --nobibsource --no-header --no-footer -o $@ $<