Makefile 中的链接模式规则

问题描述 投票:0回答:1

我有一个 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。

makefile gnu-make
1个回答
1
投票

那是因为这个:

c-%-d: a-%-b

没有定义规则。它取消了规则(无论如何都不存在)。如果您想创建模式规则,您必须提供该规则将运行的配方,即使这样就足够了:

c-%-d: a-%-b ;

(添加

;
)。

© www.soinside.com 2019 - 2024. All rights reserved.