gpt4 book ai didi

makefile - 强制 make 使用更具体的规则

转载 作者:行者123 更新时间:2023-12-04 20:01:43 25 4
gpt4 key购买 nike

我似乎无法强制 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文件被自动删除,但顾名思义,这是一个可怕的黑客。似乎必须有更好的方法来强制使用特定规则。

如何强制 make 使用更具体的规则?把它放在第一位似乎没有帮助。

最佳答案

您忘记了 implicit rule search algorithm 的一个非常重要的方面:make总是更喜欢具有作为显式目标的先决条件的隐式规则,而不是其中一个先决条件模式与已知目标不匹配并且必须通过规则链构建的隐式规则。参见算法中的第 5 步与第 6 步。这与模式规则的正常“makefile 中的第一个”排序不同。

如果你想这样做,你必须写 bbl规则作为静态模式规则,而不是真正的模式规则,因此bbl文件是显式目标而不是隐式目标。

关于makefile - 强制 make 使用更具体的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28842851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com