如何在Makefile中导出环境变量

时间:2018-05-16 23:27:41

标签: makefile environment-variables

我尝试导出环境变量,以便可以在父shell中访问它们 生成文件:

export-vars:
    # extract vars from text file - remove comments - export output
    export $$(cat env.txt | grep -v ^# | xargs) 

然后当我跑:

$ make export-vars
$ echo $SOME_VAR_EXPORTED_FROM_MAKEFILE

我期待文本中的变量被设置为环境变量。

如何在目标/规则中执行此操作?

1 个答案:

答案 0 :(得分:3)

您不能使用makefile或使用单独的shell脚本执行此操作。运行make或运行shell脚本时,它会创建一个新进程。当该过程退出时,对该过程的环境所做的任何更改都将被丢弃。对于进程来说,修改其进程的环境是不可能的(在类UNIX系统中)。

你唯一能做的就是编写一个shell函数,它在你正在运行的shell进程中调用(显示你的提示等)或者有一个你来源的脚本,而不是运行:导致脚本在同一个shell进程中运行,而不是创建一个新进程。

所以你可以在你的~/.bashrc或类似的东西中写一个shell函数:

setvars () { export $(grep -v ^# env.txt | xargs); }

或者您可以编写一个单独的shell脚本,但是您无法运行它必须使用它(.命令来源脚本而不是运行它):

. set-my-vars.sh