在shell中当我输入
echo $demoPath
它打印出来了
/usr/local/demo
我该如何在makefile中获取变量$demoPath
的值?
如果您已经导出了环境变量:
export demoPath=/usr/local/demo
如果您在makefile
中设置了环境变量,您可以通过名称简单地引用它(make
会导入您设置的所有环境变量):
DEMOPATH = ${demoPath} # Or $(demoPath) if you prefer.
如果您没有导出环境变量,它在您导出之前将无法访问,除非您在命令行中明确地传递它。
如果您没有导出环境变量,它在您导出之前将无法访问,除非您在命令行中明确地传递它:
make DEMOPATH="${demoPath}" …
如果您正在使用C shell衍生版,请将export
命令替换为setenv demoPath /usr/local/demo
。
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
.env
文件位于同一目录中,您可以使用include .env
语句:
.env
.env
DEMO_PATH=/usr/local/demo
Makefile
include .env
demo-path:
echo ${DEMO_PATH}
export DEMO_PATH=/usr/local/demo
,就像这样. .env
。 - John如果你在同一个脚本中导出变量,你需要使用两个$$而不是$, 如果你的Makefile看起来像这样:
target:
. ./init.sh; \
echo ${HOMEPATH}:$${FOO};
在init.sh脚本中,你导出了变量FOO。
$ cat ./init.sh
#!/bin/bash
export FOO=foo:
这样,当你运行make目标时,之前定义的环境变量HOMEPATH只需使用一个$显示,但在你的make文件中执行的init.sh脚本中导出的环境变量FOO需要使用$$来显示。
demoPath=/usr/local/demo make
。你可能想测试一下,或者更新你的答案。干杯! - A.D.$(SHELL)
确定make
用于执行命令的 shell,其初始化为/bin/sh
而不是环境中的值。 - Mark Reed