我想创建一个目标,方法是将bootload_
添加到Make中的列表变量前面。这是我的档案:
cs00:
echo "in original target cs00"
cs01:
echo "in original target cs01"
BOOTLOAD_ENABLED:=cs00 cs01
bootload_$(BOOTLOAD_ENABLED):
echo "in bootload $@"
当我运行make bootload_cs00
时,我得到了这个输出:
Makefile:9: warning: overriding recipe for target 'cs01'
Makefile:4: warning: ignoring old recipe for target 'cs01'
echo "in bootload bootload_cs00"
in bootload bootload_cs00
我不明白为什么这会超越原定目标?我在这里错过了什么。
答案 0 :(得分:1)
bootload_$(BOOTLOAD_ENABLED)
扩展为bootload_cs00 cs01
,即它只是字符串连接。
您可以使用patsubst
,addprefix
或替换引用为变量中的所有字加上前缀。 E.g:
BOOTLOAD_ENABLED:=cs00 cs01
$(info $(addprefix bootload_,${BOOTLOAD_ENABLED}))
$(info $(patsubst %,bootload_%,${BOOTLOAD_ENABLED}))
$(info ${BOOTLOAD_ENABLED:%=bootload_%})
它们都打印相同的bootload_cs00 bootload_cs01
字符串。
有关详细信息,请参阅Functions for Transforming Text。