我有一个(大致)如下的Makefile:
.PHONY: all
.SUFFIXES:
OUT = /www/web
all: $(OUT)/index.html
# rule 1
%.html: %.in
build_html $< $@
# rule 2
$(OUT)/%: %
cp $< $@
这个 Makefile 存在一个问题,因为有两种不同的方法可以构建
$(OUT)/index.html
:
- 构建
./index.html
(规则 1),然后将其复制到$(OUT)
(规则 2)。 - 将
./index.in
复制到$(OUT)
(规则 2),然后构建$(OUT)/index.html
(规则 1)。
我希望 make
总是更倾向于选项1。如何表明这两个模式规则之间存在首选顺序?
(我能想到一些笨办法来解决这个特定的问题,但我希望找到一个尽可能通用的解决方案——例如,将规则2的模式改为 $(OUT)/%.html: %.html
将解决问题,但会丧失通用性,因为如果我想以同样的方式处理其他类型的文件,就需要重复自己。)
$(OUT)/index.html
,规则1最匹配(最短词干)。规则1表示我们需要$(OUT)/index.in
,只有规则2与之匹配。 - Calvin