Make - 如何为无扩展文件定义通用模式

时间:2014-08-10 13:31:08

标签: makefile

我正在尝试一些半文字编程,并且需要构建一些没有.extension的文件。我想在我的Makefile中使用通用模式,但无法使其工作。

这是我的Makefile,缩减为MWE:

all: jcb jcbsetup
jcbsetup: jcb.org
%.: %.org
    ./weborg2asm.awk $< > $@

在这种情况下,make -B说“无所事事”

如果我尝试将%.:更改为% :,则只构建jcb,而不是jcbsetup。

显然,我可以为每个显式目标编写配方,但出于显而易见的原因,我想使用模式。我可以(有点)理解为什么这不起作用,但有什么用吗?

我在cygwin下使用Gnu Make 4.0。

1 个答案:

答案 0 :(得分:1)

如图所示,这显示了如何从jcb.构建jcb.org,并且对jcb一无所知。

如果(看起来正确)您将规则更改为%: %.org,那么这似乎做了正确的事情,并且您的makefile正在按照您的要求进行操作。

请注意,您的目标jcbsetup: jcb.org没有任何操作,因此它表示“当jcb.org成立时,jcbsetup也是最新的”,并且它不会做任何额外来制作jcbsetup

如果您有jcbsetup.org,则%: %.org会匹配,这表明如何从jcbsetup创建jcbsetup.org。但这只会在这种情况下发生。

请注意,模式规则(涉及%)通常在之前第一个具体规则;它们之后可能不被识别(即使它们是,它们更常规/可读性最先出现)。