Makefile 将变量从一个Make目标传递到另一个Make目标

Makefile 将变量从一个Make目标传递到另一个Make目标,makefile,gnu-make,Makefile,Gnu Make,目标_2无法获取目标_1中设置的评估值, 目标评估结果是空手的,即没有为其赋值 .PHONY:target_1 target_1: ifeq ($(RQM_SETUP),ci) $(eval efs-mount-path := $(shell mktemp -d)) else @echo "$(VAR)" endif .PHONY:target_2 target_2: $(MAKE) target_1 VAR=dags $(eval

目标_2无法获取目标_1中设置的评估值, 目标评估结果是空手的,即没有为其赋值

.PHONY:target_1
target_1: 
ifeq ($(RQM_SETUP),ci)
    $(eval efs-mount-path := $(shell mktemp -d))
else
    @echo "$(VAR)" 
endif


.PHONY:target_2
target_2: 
    $(MAKE) target_1 VAR=dags
    $(eval destination := $(efs-mount-path))

当然可以。通过运行
$(MAKE)
您正在调用MAKE程序的一个全新实例。其他程序中设置的变量在当前程序中不可用。总而言之,这似乎是一种令人困惑的创建makefile的方法,但是如果没有更多关于您真正想要做什么的细节,我们就没有更多的话可以说了。感觉就像你试图把一个makefile当作一种过程语言来对待,而事实并非如此。在配方中运行
eval
几乎总是一个坏主意,如果可以的话,通常最好避免使用递归make。但是,无论如何,如果你想这样做,你必须在父makefile中运行
eval
赋值,然后在用
$(make)之类的东西调用它时将值传递给子级target_1 VAR=dags efs装载点=$(efs装载点)
。在我看来,他似乎摇摇晃晃。如果有人直接运行
make target_1
,该怎么办?对我来说是重复的。最后,我使用“导出”使变量在多个目标中可用