我的项目中有一个目标,它上面可以有大量不同的扩展名,也有一个没有扩展名的目标:
target
target.a
target.b
...
target.x
我希望能够使用通配符为扩展名指定目标,因此我不需要为每个目标扩展名提供配方。我想我可以通过模式规则这样做:
target%: VAR=1
$(MAKE) MY_VARS += $(VAR) $@
但是,当我运行make时,这不会构建目标。任何人都可以建议我可以做这个通配符吗?
答案 0 :(得分:3)
你有三个问题。首先,您不能将同一规则定义中的特定于目标的变量与配方相结合。其次,模式必须匹配至少一个字符,因此模式target%
与目标target
不匹配。最后,当您在命令行上提供变量赋值时,您不能在变量名,赋值运算符和值之间使用空格:它们必须都是相同的单词。
你可以用这个:
targe%: VAR=1
targe%:
$(MAKE) MY_VARS+='$(VAR)' $@