使从 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
我有一个棘手的难题要问大家!
我想用 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