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

时间:2014-10-15 05:40:15

标签: 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是我想要弄清楚的。基本上,我想要实现的是在所有目标操作中都有一个通用模式,而不是A-foobar-%B-foobar-%C-foobar-%。那么,我该怎么办?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

因此,您希望删除 $ @ 的前两个令牌(当-用作令牌工具时)。

我们走了:

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,$@,-)