我有一个 Makefile,如果简化的话,可以归结为:
.PHONY: FORCE
FORCE:
a-%-b: FORCE
@echo 'a-$*-b'
c-%-d: a-%-b
如果我运行
make a-test-b
,它会按预期打印 a-test-b
。但是,如果我尝试 make c-test-d
,则会失败并显示
make: *** No rule to make target `c-test-d'. Stop.
有什么办法可以让这个工作成功吗?这对我来说似乎很困惑,因为这样的事情是有效的:
%.txt1:
touch $*.txt1
%.txt2: %.txt1
cp $< $@
这里,我还有一个模式规则,它以另一个模式规则的目标为先决条件;然而,与上面的示例相反,如果我这样做,它就可以很好地工作
make test.txt2
- 它会很高兴地首先创建 test.txt1,然后将其复制为 test.txt2。
那是因为这个:
c-%-d: a-%-b
没有定义规则。它取消了规则(无论如何都不存在)。如果您想创建模式规则,您必须提供该规则将运行的配方,即使这样就足够了:
c-%-d: a-%-b ;
(添加
;
)。