使从 makefile 导出环境变量成为可能的解决方法

workaround to make exporting environment variable from makefile possible

我有一个棘手的难题要问大家!

我想用 makefile 设置环境变量。我知道,被调用进程无法更改调用环境的变量,但必须有一些解决方法。

在生成文件中:

target:
    export VAR=test

稍后,在终端中:

echo $VAR

应该打印“测试”。

如何通过某种解决方法实现这一点?

非常感谢您的帮助!

Make 会更新文件,因此您需要做的是将变量“导出”到文件,然后在终端中使用文件的内容调用一些东西。可能的复杂解决方案:

-- Makefile --
target:
    echo "test" > VAR

-- Terminal --
cat VAR;              # Prints var content, like echo does
cat VAR | xargs echo; # Sends each token (?) as argument to echo, printing it.
                      # Here be dragons.

正如安德烈亚斯所说,对此没有“解决方法”。这是 POSIX 操作系统的一项基本功能。 父进程(例如 shell)修改其环境的方法是做一些不同于简单 运行 make 的事情。如果你愿意这样做,那么你有很多选择。

例如,如果您的 makefile 这样做:

target:
        @echo 'export VAR=test'

然后在您的 shell 中您可以这样做:

$ eval $(make target)

现在将设置该变量。当然,如果你的 makefile 打印 任何东西 除了有效的 shell 语法,这将失败得很惨,所以你只能做非常有限的事情。

或者,您可以让 makefile 将内容写入文件,然后获取该文件,如下所示:

target:
        echo 'export VAR=test' > target

然后:

$ make target
$ . target