假设我在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-%
。那么,我该怎么办?
答案 0 :(得分:1)
如果我理解你的问题,这就是你想要的:
%-foobar-int:
@echo mvn test -Dtest.env=$(@:$*-foobar-%=%)
%-foobar-qa:
@echo mvn test -Dtest.env=$(@:$*-foobar-%=%)
只有2条规则,因为A-foobar-int
和C-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,$@,-)