如果我正确理解了制作文档,那么在目标模式中我只能使用字符%一次! 我面临的情况是我的目标看起来像:$(Home)/ecc_%_1st_%.gff: %.fpp。每当我尝试匹配/home/ecc_map_1st_map.gff: map.fpp时,Make就会抱怨找不到模式。我知道这是因为使用了两个%,($(Home)/ecc_map_1st_%.gff: %.fpp运行得很完美)。有没有办法可以在一个目标中使用两个%?谢谢。
map
。.SECONDEXPANSION:
$(Home)/ecc_%.gff: $$(word 1,$$(subst _, ,$$*)).fpp
$*
,但是二次展开允许您这样做。请注意,我使用$$
代替$
,以便真正的展开发生在第二次而不是第一次。$(Home)/ecc_map_1st_map.gff
。 $*
变量将成为词干,即map_1st_map
。然后,$(subst _, ,...)
将下划线替换为空格,以获得map 1st map
。现在,$(word N,...)
从中提取第N个以空格分隔的单词。第一个单词将是第一个map
,第二个将是1st
,第三个将是第二个map
。我选择第一个。 $(Home)/ecc_map_2nd_notmap__foo.gff
可以匹配并给出 map.fpp
)。您可以进行进一步检查(在中间加入 1st
,其他两个必须匹配)并退出:extract-name = $(call extract-name-helper,$1,$(word 1,$(subst _, ,$1)))
extract-name-helper = $(if $(filter $2_1st_$2,$1),$2,$(error Invalid .gff target))
.SECONDEXPANSION:
ecc_%.gff: $$(call extract-name,$$*).fpp