我如何在 make 目标之间传递 ENV 变量
How can i pass ENV variables between make targets
我在makefile中有这样的
target1:
export var1=test
$(MAKE) target2
target2:
echo $(var1)
这是空的
我有其他依赖项,所以我想在第一个目标中设置变量,然后所有子依赖项都应该能够访问它
编辑:
.ONESHELL:
target1:
export var1=test
echo $(var1)
输出
make target1
export var1=test
echo
默认情况下,make 为每个配方调用一个新的 shell 环境,第一行的 export
ed 变量不在第二行的范围内。
您可以通过多种方式解决此问题:
使用 make 的 export
指令导出变量
target1: export var1 := test
target1:
$(MAKE) target2
使用make的命令行变量赋值
target1:
$(MAKE) target2 var1=test
使用shell命令变量赋值
target1:
var1=test $(MAKE) target2
将两个命令组合在一个配方中
target1:
export var1=test; $(MAKE) target2
强制 make 将所有配方传递给同一个 shell 实例
.ONESHELL:
target1:
export var1=test
$(make) target2
我在makefile中有这样的
target1:
export var1=test
$(MAKE) target2
target2:
echo $(var1)
这是空的
我有其他依赖项,所以我想在第一个目标中设置变量,然后所有子依赖项都应该能够访问它
编辑:
.ONESHELL:
target1:
export var1=test
echo $(var1)
输出
make target1
export var1=test
echo
默认情况下,make 为每个配方调用一个新的 shell 环境,第一行的 export
ed 变量不在第二行的范围内。
您可以通过多种方式解决此问题:
使用 make 的 export
指令导出变量
target1: export var1 := test
target1:
$(MAKE) target2
使用make的命令行变量赋值
target1:
$(MAKE) target2 var1=test
使用shell命令变量赋值
target1:
var1=test $(MAKE) target2
将两个命令组合在一个配方中
target1:
export var1=test; $(MAKE) target2
强制 make 将所有配方传递给同一个 shell 实例
.ONESHELL:
target1:
export var1=test
$(make) target2