首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使动态创建的变量名

使动态创建的变量名
EN

Stack Overflow用户
提问于 2017-09-29 07:38:37
回答 1查看 166关注 0票数 0

这是我的制作配方,我传递的是非my值*,虽然bamboo_nonle_password变量有密码,但函数仍然失败

代码语言:javascript
复制
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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-12 16:36:58

你这个疯子:)

Make将在它想要执行它之前扩展它的配方。此时,make知道%对应的是什么,因此可以确保适当设置$*。不幸的是,ifndefendif对是在读取makefile时计算的,而不是在扩展菜谱时计算的。

这给出了答案:使用宏。也许是$(origin …)或者$(flavor …)

代码语言:javascript
复制
validatevar.%:
    @echo 
    $(if $(filter undefined,$(origin bamboo_$*_password)),@echo "Bamboo variable bamboo_$*_password is undefined")
    $(if $(filter undefined,$(origin bamboo_$*_password)),exit 1)

当然,你可以把这个收拾一下。也许:

代码语言:javascript
复制
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 

有两件事要注意:

  1. 在执行任何一行之前,整个菜谱都会一次展开。这样做的结果是,在哪里展开$(error)断言并不重要。我把它们放在了最上面。
  2. ifndef还检测空变量以及未定义的变量。您可能希望调整die-if-undefined以考虑到这一点(并将其重命名为die-if-empty)。

(如果make只使用--error-undefined-variables参数,只是为了匹配现有的--warn-undefined-variables参数,那么这一切都要容易得多。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46484044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档