Makefile 如何忽略目标字符串的一部分
假设我在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-%是我试图弄清楚的。基本上,我想要实现的是在所有目标操作中都有一个通用模式,而不
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免费软件基金会,公司是的,$ *正是我正在寻找的模式。