从 makefile 中的文件导出环境变量

从 makefile 中的文件导出环境变量

我正在尝试编写一个 make 任务,该任务将从我的 .env 文件中导出所有变量,该文件应如下所示:

A=1
B=2

如果我在终端输入:

set -a
. ./.env
set +a

它工作得很好。

但 Makefile 中的相同任务不起作用:

export.env:
    set -a
    . ./.env
    set +a


make export.env # done
printenv | grep A # nothing!

我需要这些变量在 make 任务完成后继续存在。

答案1

与任何过程一样,make 无法修改现有进程的环境,它只能控制传递给它启动的进程的环境。如果不填充输入缓冲区,就无法完成您想要做的事情。

此外,make在不同的 shell 中处理每个命令行,因此您的set -a. ./.envset +a行在单独的 shell 中运行。的效果. ./.env只能在运行该命令的 shell 中看到。

答案2

现代make实施包括对环境管理的支持。

GNU make does、my smakedos 和我的增强版本(SunPro Make在 tarball 中)都schilytools支持它。

如果您仔细编写env文件以在不同行上包含赋值和export语句,则可以include将该env文件放在您的Makefile.

使用例如:

include $(HOME)/.env

在你的Makefile

相关内容