这是我的制作配方,我传递的是非my值*,虽然bamboo_nonle_password变量有密码,但函数仍然失败
validatevar.%: $(if $(IS_BAMBOO),)
@echo "\n################################################################################"
@echo ">>> validatevar"
@echo ">>> Start: Validate bamboo variables "
ifndef bamboo_$*_password
@echo "Bamboo variable bamboo_$*_password is empty"
exit 1
endif
ifndef bamboo_$*_server
@echo "Bamboo variable bamboo_$*_server is empty"
exit 1
endif
@echo "<<< Done: validatevar"
@echo "################################################################################\n\n"发布于 2017-10-12 16:36:58
你这个疯子:)
Make将在它想要执行它之前扩展它的配方。此时,make知道%对应的是什么,因此可以确保适当设置$*。不幸的是,ifndef…endif对是在读取makefile时计算的,而不是在扩展菜谱时计算的。
这给出了答案:使用宏。也许是$(origin …)或者$(flavor …)
validatevar.%:
@echo
$(if $(filter undefined,$(origin bamboo_$*_password)),@echo "Bamboo variable bamboo_$*_password is undefined")
$(if $(filter undefined,$(origin bamboo_$*_password)),exit 1)当然,你可以把这个收拾一下。也许:
die-if-undefined = $(if $(filter undefined,$(origin $1)),$(error "$1" is undefined))
validatevar.%:
$(call die-if-undefined,bamboo_$*_password)
$(call die-if-undefined,bamboo_$*_server)
@echo
@echo 有两件事要注意:
$(error)断言并不重要。我把它们放在了最上面。ifndef还检测空变量以及未定义的变量。您可能希望调整die-if-undefined以考虑到这一点(并将其重命名为die-if-empty)。(如果make只使用--error-undefined-variables参数,只是为了匹配现有的--warn-undefined-variables参数,那么这一切都要容易得多。)
https://stackoverflow.com/questions/46484044
复制相似问题