Make:包含规则名称的通配符

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

我正在制作文物

foo.out
bar.out
qux.out
。我有一个规则
%.cooked: %.raw

  • 对于所有文件
    foo-★.raw
    ,我需要
    foo.out
    依赖于
    foo-★.cooked
  • 同样适用于
    bar
    qux

目前,我没有限制正在构建的

raw
文件,因此
make bar.out
正在浪费时间地烹饪数十个
foo-1.raw
foo-2a.raw
foo-2b.raw
等,这确实占用了我的时间。

我尝试使用二次扩展:

.SECONDEXPANSION:
$(OUTFILES): %.out: $$(patsubst %.raw,%.cooked,$$(wildcard $$%-*.raw))
    build $< --output $@

但似乎这最终变成了空的,什么也没有建造。

makefile gnu-make
1个回答
0
投票

将 Renaud 使用

$$*
的建议与
$$(call
后面的间接层相结合就达到了目的:

OUT_raws = $(patsubst %.raw,%.cooked,$(wildcard $(1)-*.raw))

.SECONDEXPANSION:
$(OUTFILES): %.out: $$(call OUT_raws,$$*)
    build $< --output $@
© www.soinside.com 2019 - 2024. All rights reserved.