How can i pass ENV variables between make targets

你。 提交于 2019-12-09 17:53:37

问题


I have like this in makefile

target1:
       export var1=test
       $(MAKE) target2

target2:
       echo $(var1)

This is coming as empty

I have other depencies so i want to set variable in first target and then all children dependencies should be able to access that

EDIT:

.ONESHELL:

target1:
        export var1=test
        echo $(var1)

output

make target1
export var1=test
echo

回答1:


By default make invokes a new shell environment for each recipe, the exported variable on the first line isn't in scope for the second.

You can fix this in multiple ways:

Export the variable with make's export directive

target1: export var1 := test
target1:
    $(MAKE) target2

Use make's command line variable assignment

target1:
    $(MAKE) target2 var1=test

Use shell command variable assignment

target1:
    var1=test $(MAKE) target2

Combine the two commands in a single recipe

target1:
    export var1=test; $(MAKE) target2

Force make to pass all recipes to the same shell instance

.ONESHELL:

target1:
    export var1=test
    $(make) target2


来源:https://stackoverflow.com/questions/38927419/how-can-i-pass-env-variables-between-make-targets

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!