如何在makefile中获取shell环境变量?


102

在外壳中,当我进入

echo $demoPath

它打印

/usr/local/demo

如何$demoPath在Makefile中获取此变量的值?

Answers:


152

如果已导出环境变量:

export demoPath=/usr/local/demo

您可以在makefilemake导入您设置的所有环境变量)中按名称简单地引用它:

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

如果尚未导出环境变量,则除非您导出了环境变量,否则除非在命令行中明确传递它,否则无法访问它:

make DEMOPATH="${demoPath}" 

如果使用的是C Shell派生,请替换setenv demoPath /usr/local/demoexport命令。


3
“ make导入您设置的所有环境变量”。它起作用了!很好〜,我之前对此一无所知,非常感谢。
嘉林2015年

@jonathan_leffler我的灵感来自您的回答,我做了一些不同的事情。我在调用make之前设置了envvar而不导出它:demoPath=/usr/local/demo make。您可能想对其进行测试,并可能更新您的答案。干杯!
AD

@AD是的,这是为特定命令设置环境变量值的另一种机制。它与询问如何访问现有变量的值,而不是如何动态创建一个变量的问题有些关系。有时并不能阻止它成为有用的技术。
乔纳森·莱夫勒

10

对于那些想要一些官方文件来确认行为的人

make中的变量可以来自运行make的环境。make看到的每个环境变量在启动时都会转换为具有相同名称和值的make变量。但是,makefile中的显式分配或使用命令参数会覆盖环境。(如果指定了“ -e”标志,则来自环境的值将覆盖makefile中的分配。

https://www.gnu.org/software/make/manual/html_node/Environment.html


6
all:
    echo ${PATH}

或仅针对一个命令更改PATH:

all:
    PATH=/my/path:${PATH} cmd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.