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



我有一个棘手的难题给你们!

我想用makefile设置环境变量。我知道,被调用的进程不能改变调用环境的变量,但必须有一些变通办法。

在makefile:

target:
export VAR=test

后端:

echo $VAR

应该打印"test"

如何通过某种变通来实现这一点?

非常感谢您的帮助!

正如Andreas所说,没有"变通办法"。对于这个。这是POSIX操作系统的一个基本特性。父进程(例如shell)修改其环境的惟一方法是做一些与简单运行make不同的事情。如果你愿意这样做,那么你还有其他选择。

例如,如果你的makefile这样做:
target:
@echo 'export VAR=test'

那么在你的shell中你可以这样做:

$ eval $(make target)

,现在该变量将被设置。当然,如果你的makefile输出ANYTHING,这将会失败。除了有效的shell语法,所以你只能做一组非常有限的事情。

或者你可以让makefile先写一些东西到一个文件,然后再生成这个文件,像这样:

target:
echo 'export VAR=test' > target

:

$ make target
$ . target

Make对文件进行更新,所以您需要做的是"export"将变量输入到一个文件中,然后稍后在终端中使用该文件的内容调用某些内容。可能的复杂解决方案:

-- 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.

最新更新