如何在Makefile中导出环境变量

dez*_*dez 3 makefile environment-variables

我正在尝试导出环境变量,以便可以在父 shell MakeFile 中访问它们:

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

然后当我跑步时:

$ make export-vars
$ echo $SOME_VAR_EXPORTED_FROM_MAKEFILE
Run Code Online (Sandbox Code Playgroud)

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

如何在目标/规则内执行此操作有任何帮助吗?

Mad*_*ist 8

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

您唯一可以做的就是编写一个 shell 函数,该函数在您正在运行的 shell 进程中调用(显示您的提示符等),或者使用您源的脚本,而不是运行:这将导致脚本在同一个 shell 进程中运行而不是创建一个新进程。

所以你可以在你的或类似的函数中编写一个 shell 函数,~/.bashrc如下所示:

setvars () { export $(grep -v ^# env.txt | xargs); }
Run Code Online (Sandbox Code Playgroud)

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

. set-my-vars.sh
Run Code Online (Sandbox Code Playgroud)