我正在尝试将一些环境变量包含到 Makefile 中。 env 文件如下所示:
FOO=bar
BAZ=quux
export
请注意,每个环境变量都没有引导。如果我在 Makefile 中添加前导文件export
和include
env 文件,一切都会正常工作。但我需要保持环境变量没有领先export
。这阻止了我只include envfile
在 Makefile 中使用。
我也尝试过做这样的事情:
sed '/^#/!s/^/export /' envfile > $(BUILDDIR)/env
include $(BUILDDIR)/env
但是这样做会导致 make 抛出错误,因为 env 文件不存在可供包含。
答案1
我遇到了类似的问题并登陆了这个线程。另一种可能的解决方案是只执行不带任何参数的 make export 命令:
include .env
export
这会将所有 make 变量导出为环境变量。此行为可能会或可能不会匹配所有用例,但它对我有用并且不涉及任何 shell 脚本魔法。
答案2
如果您使用 gnu make,则应该包含该envfile
文件,然后导出从同一文件获得的变量列表:
#!make
include envfile
export $(shell sed 's/=.*//' envfile)
test:
env
答案3
要完成之前的回答meuh
,如果您希望 env 文件是动态的,您可以定义一个设置函数。
- 创建包含一些内容的
env/local-dev.env
文件env/integ.env
- 定义一个方法来加载它
定义setup_env $(eval ENV_FILE := env/$(1).env) @echo“-设置环境$(ENV_FILE)” $(eval包括env/$(1).env) $(eval export sed 's/=.*//' env/$(1).env) 恩德夫
然后使用它
localDevEnv: ##加载env/local-dev.env环境 $(调用 setup_env,local-dev) integEnv: ##加载env/integ.env环境 $(调用setup_env,整数)
答案4
保留预先存在的 ENV 变量
export $(shell [ ! -n "$(ENVFILE)" ] || cat $(ENVFILE) | grep -v \
--perl-regexp '^('$$(env | sed 's/=.*//'g | tr '\n' '|')')\=')
test:
echo $$FOO
跑步
make ENVFILE=envfile test # bar
export FOO=foo
make ENVFILE=envfile test # foo