Makefile 如何忽略目标字符串的一部分

Makefile 如何忽略目标字符串的一部分,makefile,Makefile,假设我在Makefile中有一些目标,如下所示: A-foobar-int: mvn test -Dtest.env=(@:X-foobar-%=%) B-foobar-qa: mvn test -Dtest.env=(@:X-foobar-%=%) C-foobar-int: mvn test -Dtest.env=(@:X-foobar-%=%) 目前,X-foobar中的X-as-%是我试图弄清楚的。基本上,我想要实现的是在所有目标操作中都有一个通用模式,而不

假设我在Makefile中有一些目标,如下所示:

A-foobar-int:
    mvn test -Dtest.env=(@:X-foobar-%=%)

B-foobar-qa:
    mvn test -Dtest.env=(@:X-foobar-%=%)

C-foobar-int:
    mvn test -Dtest.env=(@:X-foobar-%=%)

目前,X-foobar中的X-as-%是我试图弄清楚的。基本上,我想要实现的是在所有目标操作中都有一个通用模式,而不是
a-foobar-%
B-foobar-%
C-foobar-%
。那么,我该怎么办呢?

那么,您想删除$@的前两个标记(当
-
用作标记器时)

我们开始:

drop-two-tokens-helper = $(subst $(word 1,$3)$2$(word 2,$3)$2,,$1)

drop-two-tokens = $(call drop-two-tokens-helper,$2$2$2$1,$2,$2$2$2$(subst $2, ,$1))

A-foobar-int:
    mvn test -Dtest.env=$(call drop-two-tokens,$@,-)

如果我正确理解了你的问题,这就是你想要的:

%-foobar-int:
    @echo mvn test -Dtest.env=$(@:$*-foobar-%=%)

%-foobar-qa:
    @echo mvn test -Dtest.env=$(@:$*-foobar-%=%)

只有两条规则,因为
A-foobar-int
C-foobar-int
都由第一条规则处理。这些规则使用
$*
获取与目标模式匹配的stem值。(我正在使用
echo
检查结果,因为我没有设置运行命令。)

Make不太适合使用通配符。这是可以做到的,但解决方案将相当丑陋。你还感兴趣吗?如果它太难看了,我可能更喜欢硬编码的值。不管怎样,谢谢。我的mac电脑坏了。使版本是这样的:GNU使3.81版权(C)2006免费软件基金会,公司是的,$ *正是我正在寻找的模式。