Makefile模式规则限制

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

请考虑以下简化的Makefile

target :
    (recipe)

target-mt : (add some flags)
target-mt : target

此示例按预期工作:make target-mt添加一些标志并继续编译target

现在,由于*-mt模式经常发生,并且始终具有相同的标志,因此,我想使这种工作变得普遍。因此,让我们用Makefile pattern rule简化:

target :
    (recipe)

%-mt : (add some flags)

target-mt : target

这可以按预期工作,现在所有以后的*-mt目标都收到相同的附加标志集。现在,请注意something-mt的依赖性始终为something。因此,我很想进一步概括这种关系:

target :
    (recipe)

%-mt : (add some flags)
%-mt : %

这一个无效

make: *** No rule to make target `target-mt'.  Stop.

[这似乎与模式规则的一般表述不符,例如规范示例:

%.o : %.c
    $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@

我认为一定有原因导致此失败,并且我认为这可能与以下事实有关:依赖项是纯%,而不是像%.c这样的定义。但是我在文档中找不到与这种限制相关的任何信息(上面链接)。

问题是:

1)对此行为有解释吗?

2)还有另一种方法可以实现相同的目标吗?

makefile
1个回答
0
投票

您不能在没有配方的情况下声明模式规则。或更确切地说,您可以,但是它并没有满足您的要求:取而代之的是cancels the pattern rule

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