GNU Make 动态创建的变量名
GNU Make dynamically created variable name
这是我的制作方法,我传递的是 nonle 值 *,虽然 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"
你这个疯子:)
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 )),$(error "" is undefined))
validatevar.%:
$(call die-if-undefined,bamboo_$*_password)
$(call die-if-undefined,bamboo_$*_server)
@echo
@echo
注意两点:
- 菜谱的整个一口气展开,before任意一行都执行。
这样做的结果是,在何处扩展
$(error)
断言并不重要。
我把它们放在最上面了。
ifndef
也检测空变量,以及未定义的变量。您可能希望调整 die-if-undefined
以考虑到这一点(并将其重命名为 die-if-empty
)。
(如果 make 只需要一个 --error-undefined-variables
参数,这一切都会容易得多,
只是为了匹配现有的 --warn-undefined-variables
参数。)
这是我的制作方法,我传递的是 nonle 值 *,虽然 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"
你这个疯子:)
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 )),$(error "" is undefined))
validatevar.%:
$(call die-if-undefined,bamboo_$*_password)
$(call die-if-undefined,bamboo_$*_server)
@echo
@echo
注意两点:
- 菜谱的整个一口气展开,before任意一行都执行。
这样做的结果是,在何处扩展
$(error)
断言并不重要。 我把它们放在最上面了。 ifndef
也检测空变量,以及未定义的变量。您可能希望调整die-if-undefined
以考虑到这一点(并将其重命名为die-if-empty
)。
(如果 make 只需要一个 --error-undefined-variables
参数,这一切都会容易得多,
只是为了匹配现有的 --warn-undefined-variables
参数。)