Makefile 如何为构建目录中创建的任何库归档编写一个模式规则?

Makefile 如何为构建目录中创建的任何库归档编写一个模式规则?,makefile,gnu-make,Makefile,Gnu Make,我想为构建任何库归档定义一个模式规则。以下示例有效(假设对象文件已存在于生成目录中): 但是,我更喜欢在build目录中创建库归档,但这不再有效。模式规则不再匹配 all: build/librot.a( build/rot13.o build/rot47.o ) ARFLAGS := -rcsU (%): % $(AR) $(ARFLAGS) $@ $% 我知道我可以将规则修改为: build/librot.a(%): % $(AR) $(ARFLAGS) $@ $%

我想为构建任何库归档定义一个模式规则。以下示例有效(假设对象文件已存在于生成目录中):

但是,我更喜欢在build目录中创建库归档,但这不再有效。模式规则不再匹配

all: build/librot.a( build/rot13.o build/rot47.o )

ARFLAGS := -rcsU

(%): %
    $(AR) $(ARFLAGS) $@ $%
我知道我可以将规则修改为:

build/librot.a(%): %
    $(AR) $(ARFLAGS) $@ $%

但我不想为每个库定义新的模式规则。如何为在构建目录中创建的任何库存档编写一个模式规则?

如果假设“对象文件已经存在于构建目录中”,那么GNU Make 4.2 Makefile需要两行代码:(1)
all:build/librot.a(build/rot13.o build/rot47.o)
和(2)
ARFLAGS:=-rcsU
。内置的
(%):%
规则完成其余部分。@urcodebetterznow:谢谢您的评论。我认为你是对的,当我发布这个问题时,我把事情搞砸了。我试图在写问题时简化情况,并在写问题时“修复”了问题。问题是我定义的另一个模式规则的匹配优先级高于(%):%规则。
build/librot.a(%): %
    $(AR) $(ARFLAGS) $@ $%