Makefile调用规则时执行期变量未生效,如何修正?
问题分析与解决方法
你的问题出在aws/parameters规则的依赖声明上:规则里把aws/create_stack作为依赖,会在执行配方中的$(MAKE)命令之前就自动触发一次aws/create_stack的执行,而这次执行完全没有传递你想要的stack_name和region变量,所以才会出现变量未生效的现象。
修改方案
直接移除aws/parameters规则的依赖项,只在配方里通过$(MAKE)传递变量调用目标即可:
aws/create_stack: aws cloudformation create-stack \ --stack-name $(stack_name) \ --region $(region) \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND aws/parameters: $(MAKE) aws/create_stack stack_name=parameter region=$(REGION)
扩展说明
如果aws/create_stack本身需要前置条件(比如依赖某个模板文件),把这些条件加到aws/create_stack自己的依赖里即可,不要放到aws/parameters的依赖中。比如:
aws/create_stack: templates/parameter-stack.yml aws cloudformation create-stack \ --stack-name $(stack_name) \ --region $(region) \ --template-body file://$< \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND aws/parameters: $(MAKE) aws/create_stack stack_name=parameter region=$(REGION)
这样既保证了aws/create_stack的前置依赖被满足,又能在调用时正确传递自定义变量。
内容的提问来源于stack exchange,提问作者aerioeus
相关产品推荐
相关产品推荐

