Makefile Rule调用Rule-如何在执行时解析Variables



我想调用我创建的另一个规则,该规则用于为我的Makefile中的多个目标提供服务,以创建AWS Cloudformation Stacks。规则如下:

aws/create_stack:
aws cloudformation create-stack 
--stack-name $(stack_name) 
--region $(region) 
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND

我想从另一个规则调用规则,并在执行时为规则定义变量,如下所示:

aws/parameters: aws/create_stack
$(MAKE) aws/create_stack stack_name=parameter region=$(REGION) 

但由于某种原因,当我执行Makefile时,我调用的第一个规则没有使用Caller规则的receipe中设置的Variables。

当我在规则(aws/parameters(之外单独设置变量时,它就起作用了。我必须如何重写它才能将变量赋值保留在规则中(aws/parameter(?

谢谢

这里不需要使用递归($(MAKE) ...(。只需使用目标特定变量:

parameters: stack_name := parameter
parameters: region := $(REGION)
parameters: create_stack
@echo parameters done
create_stack:
@echo create_stack: stack_name is $(stack_name)
@echo create_stack: region is $(region)

正如@Beta所写,您可以使用;依赖方法";;一个更精简的版本如下:

aws/parameters: stack_name := parameter
aws/parameters: region := $(REGION)
was/parameters: aws/create_stack

最新更新