#################脚本内容如下#####################
3RDPARTY_CMMB := max2scend
3RDPARTY_GPS := bcm4751
PRJ_PCB_VERSION := 35pcb222
3RDPARTY_WIFI := 777wifi778
#3RDPARTY_EMPTY :=
3RDPARTY_MSENSOR = bmm050
SET_VAR_NAMES_OLD := 3RDPARTY_CMMB 3RDPARTY_GPS 3RDPARTY_EMPTY 3RDPARTY_TP PRJ_PCB_VERSION
SND_DEFINE_VAR_NAMES_OLD := $(foreach n_all_value, $(SET_VAR_NAMES_OLD),$(if $($(n_all_value)) ,$(n_all_value)))
#################脚本内容结束#####################
$(if $($(n_all_value)) ,$(n_all_value))
以3RDPARTY_EMPTY为例,当n_all_value循环到3RDPARTY_EMPTY 时,这个语句判断3RDPARTY_EMPTY是否为空,如果是空,把3RDPARTY_EMPTY (注意,不是3RDPARTY_EMPTY 这个变量中的值) 替换为空,否则,即3RDPARTY_EMPTY 之前有赋值,不为空,那么就返回3RDPARTY_EMPTY 这个字符串。
最后的结果是SND_DEFINE_VAR_NAMES_OLD 中的值为:3RDPARTY_CMMB 3RDPARTY_GPS PRJ_PCB_VERSION
即 最后那句 foreach 语句等效于
SND_DEFINE_VAR_NAMES_OLD :=3RDPARTY_CMMB 3RDPARTY_GPS PRJ_PCB_VERSION
3RDPARTY_EMPTY 和 3RDPARTY_TP 这两个字符串都被减去了。这里说明的只是类似减法,并不是真正的减法。作为另一类操作供大家参考。