GNU make 通配符变量目标

GNU make wildcard variable target

我正在尝试创建一个包含通配符目标的 makefile,但通配符应该匹配变量。

所以我有一个像这样的 makefile:

A_OUT := bin/a
B_OUT := bin/b

# This does not work
$(%_OUT):
    @echo $@

输出:

$ make bin/a
make: *** No rule to make target 'bin/a'.  Stop.

我不能使用bin/%:因为变量可能指向另一个目录。

在 GNU make 中有什么方法可以做到这一点吗?

如果您只想让目标列表都具有相同的配方,那么只需将它们全部列在相同的规则定义中即可。例如

$(A_OUT) $(B_OUT):
        @echo $@

您也可以为此使用变量:

A_OUT := bin/a
TGTS += $(A_OUT)
B_OUT := bin/b
TGTS += $(B_OUT)

$(TGTS):
        @echo $@

根据您的需要,您可能还想使用 Static Pattern Rules

$(TGTS) : bin/% : 
        @echo $@ : $*