make 中设置的环境变量未被所有子 shell 看到

问题描述 投票:0回答:1

我需要在 makefile 中设置环境变量,并在 makefile 调用的 python 脚本中使用它们。由于某种原因,python 脚本无法看到这些环境变量。

export VAR := env_var
PY_VAR := python -c "import os; print('VAR=' + str(os.environ.get('VAR')))"

all:
    @echo -n "echoing: VAR="
    @echo $${VAR}
    @echo -n "printenv: "
    @printenv | grep VAR
    @echo -n "python: "
    @echo $(shell ${PY_VAR})

输出:

echoing: VAR=env_var
printenv: VAR=env_var
python: VAR=None

我错过了什么?

谢谢你,

variables makefile environment
1个回答
0
投票

在大多数版本的 GNU make 中,从 makefile 导出的变量被传递给 recipes 但它们没有被传递给

shell
函数。

只有在最新版本的 GNU make(4.4 及更高版本)中,您才会看到传递给

shell
.

的导出变量

一般来说,在食谱中使用

shell
是错误的/一个坏主意。这完全没有必要,因为食谱已经 already 在 shell 中运行。

如果你显式运行

PY_VAR
而不是使用 make 的
shell
函数,它将起作用:

PY_VAR := python -c "import os; print('VAR=' + str(os.environ.get('VAR')))"

all:
        @echo $$(${PY_VAR})
© www.soinside.com 2019 - 2024. All rights reserved.