我需要在 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
我错过了什么?
谢谢你,
在大多数版本的 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})