【发布时间】:2015-03-03 22:05:05
【问题描述】:
我似乎无法强制make 使用更具体的规则。我正在使用版本 3.81,即 supposed to use the first rule it comes to,但是当更具体的规则具有必须使用另一个规则构造的依赖项时,这似乎不起作用。这是基本图片:
#rule for the dependency of the more specific rule
%.bbl: %.tex *.bib
<build the .bbl file>
#more specific rule
some_prefix%.pdf: some_prefix%.tex some_prefix%.bbl
<build the .pdf>
#general rule
%.pdf: %.tex
<build the .pdf>
所以基本上我希望make 使用.bbl 文件构建pdf,如果它匹配some_prefix,否则使用更一般的规则。不幸的是,除非我删除对.bbl 文件的依赖,否则永远不会调用第二条规则。
我似乎可以通过在一般规则中添加一个 hack 来使其工作:
%.pdf: %.tex %.hack
<make the pdf with a more general rule>
%.hack: %.tex
touch $@
这似乎可行,.hack 文件会被自动删除,但顾名思义,这是一个可怕的 hack。似乎必须有更好的方法来强制使用特定规则。
如何强制 make 使用更具体的规则?把它放在第一位似乎没有帮助。
【问题讨论】:
-
%.bbl规则本身是否正常工作?也就是说,当some_prefix_something.tex和随机*.bib文件存在时,您可以运行make some_prefix_something.bbl并使其正常工作?make -d对 make 没有按照您期望的方式使用您的规则时的行为有何看法? -
@EtanReisner,这很有趣:如果我先制作
.bbl文件,然后再制作.pdf它就可以了。.bbl文件通常会在 make 运行后被删除(这是我想要的),所以如果不先明确地创建.bbl,它就无法工作。 -
这正是我对下面答案的期望:当
bbl文件存在时,算法的第 5 步适用,因为先决条件文件已经存在。只有当文件还不存在时,make 才需要尝试使用规则链来创建它们。
标签: makefile