我有一个脚本“ set_env.py”,它输出以下uppon执行:
export MY_VAR_1=some_value
export MY_VAR_2=some_other_value
我无法更改此脚本,它是在当前环境中提供的。
此外,我还有一个看起来像这样的Makefile:
SHELL := /bin/bash
all: set_env
env | grep MY_VAR
set_env:
eval ./set_env.py
使用此makefile,我希望grep列出我的两个变量,但是似乎未设置环境。
我怀疑这是因为make为每一行都创建了一个子环境,因此第一行中设置的变量在第二行中将不可用。
所以问题是,我将如何从我的Makefile中不可触摸的脚本中导出环境?
make。然后,一种选择是将python的输出直接读取到makefile中。美中不足的是$(shell)
没有切芥末。
include Environment.mk
PHONY: test
test:
env | grep MY_VAR
Environment.mk:
./set_env.py >$@-tmp
mv $@-tmp $@
这是如何工作的?试图做的第一件事是确保makefile本身是最新的。既然我们告诉它包含make
Environment.mk
,make也必须确保它是最新的。Environment.mk
]查找规则Python运行,创建Environment.mk
Environment.mk
被读入,使用export属性创建两个test
)test
的配方,并导出具有export属性的所有变量。没有递归,但是您应该确保python总是吐出make兼容的语法。
编辑Environment.mk
,它永远不会被再生。如果set_env.py
产生不同的输出,您应该通过添加依赖性来告诉
make
这些条件是什么。如果set_env.py
需要很短的时间才能运行,我建议一个简单的.PHONY
。这样,它将在您每次运行make
时运行,并且Environment.mk
永远不会过时。.PHONY: Environment.mk