在我进入时的shell中
echo $demoPath
Run Code Online (Sandbox Code Playgroud)
它打印
/usr/local/demo
Run Code Online (Sandbox Code Playgroud)
如何$demoPath在makefile中获取此变量的值?
Jon*_*ler 111
如果您已导出环境变量:
export demoPath=/usr/local/demo
Run Code Online (Sandbox Code Playgroud)
你可以简单地在名称中引用它makefile(make导入你设置的所有环境变量):
DEMOPATH = ${demoPath} # Or $(demoPath) if you prefer.
Run Code Online (Sandbox Code Playgroud)
如果您没有导出环境变量,则在导出它之前无法访问它,或者除非您在命令行上显式传递它:
make DEMOPATH="${demoPath}" …
Run Code Online (Sandbox Code Playgroud)
如果您使用的是C shell派生,请替换setenv demoPath /usr/local/demo该export命令.
Dmi*_*nko 27
如果您的.env文件位于同一目录中,您可以使用include .env语句:
.env
DEMO_PATH=/usr/local/demo
Run Code Online (Sandbox Code Playgroud)
生成文件
include .env
demo-path:
echo ${DEMO_PATH}
Run Code Online (Sandbox Code Playgroud)
g10*_*ang 18
all:
echo ${PATH}
Run Code Online (Sandbox Code Playgroud)
或者只为一个命令更改 PATH:
all:
PATH=/my/path:${PATH} cmd
Run Code Online (Sandbox Code Playgroud)
Dyn*_* Fu 17
对于那些想要一些官方文件来确认行为的人
make 中的变量可以来自运行 make 的环境。make 启动时看到的每个环境变量都被转换为具有相同名称和值的 make 变量。但是,makefile 中的显式赋值或带有命令参数的赋值会覆盖环境。(如果指定了“-e”标志,则来自环境的值将覆盖 makefile 中的分配。
https://www.gnu.org/software/make/manual/html_node/Environment.html
Ali*_*Ali 16
如果您在同一脚本中导出变量,则需要使用两个$$ 而不是 $,如果您的Makefile看起来像这样:
target:
. ./init.sh; \
echo ${HOMEPATH}:$${FOO};
Run Code Online (Sandbox Code Playgroud)
在init.sh脚本中导出变量 FOO
$ cat ./init.sh
#!/bin/bash
export FOO=foo:
Run Code Online (Sandbox Code Playgroud)
这样,当您运行 make target 时,脚本运行之前定义的环境变量HOMEPATH将仅使用一个$显示,但在make 文件内执行的init.sh脚本中导出的环境变量FOO将需要$$为了显示