如何在 makefile 中获得一个 shell 环境变量?

当我进入贝壳

echo $demoPath

它会打印出来

/usr/local/demo

如何在 makefile 中获得这个变量 $demoPath的值?

245342 次浏览

如果你输出了环境变量:

export demoPath=/usr/local/demo

您可以简单地在 makefile中通过名称引用它(make导入您设置的所有环境变量) :

DEMOPATH = ${demoPath}    # Or $(demoPath) if you prefer.

如果您还没有导出环境变量,那么在您导出它之前它是不可访问的,或者除非您在命令行上明确地传递它:

make DEMOPATH="${demoPath}" …

如果您使用的是 C shell 派生函数,请用 setenv demoPath /usr/local/demo代替 export命令。

all:
echo ${PATH}

或者仅为一个命令更改 PATH:

all:
PATH=/my/path:${PATH} cmd

对于那些想要一些官方文件来证实这种行为的人来说

Make 中的变量可以来自运行 make 的环境。 每个环境变量开始的时候都会看到 转换为具有相同名称和值的 make 变量。 但是,是在 makefile 中显式赋值,还是使用命令赋值 参数,则重写环境。(如果指定了“-e”标志, 然后环境中的值覆盖 makefile 中的赋值。

Https://www.gnu.org/software/make/manual/html_node/environment.html

如果在同一个脚本中导出变量,则需要使用两个 $$而不是 $, 如果你的 马克菲尔是这样的:

target:
. ./init.sh; \
echo ${HOMEPATH}:$${FOO};

进去,嘘脚本中导出变量 FOO

$ cat ./init.sh
#!/bin/bash
export FOO=foo:

这样,当你运行 make target 脚本运行之前定义的 env 变量 归途将只使用一个 $来显示,但是在你的 make 文件中执行的 进去,嘘脚本中导出的 env 变量 FOO将需要 $$来显示

如果您的 .env文件位于相同的目录中,您可以使用 include .env语句:

。 env

DEMO_PATH=/usr/local/demo

马克菲尔

include .env


demo-path:
echo ${DEMO_PATH}

继续读