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

时间:2015-03-06 00:55:44

标签: shell makefile

在我输入时的shell中

echo $demoPath

打印

/usr/local/demo

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

4 个答案:

答案 0 :(得分:92)

如果您已导出环境变量:

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命令。

答案 1 :(得分:1)

all:
    echo ${PATH}

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

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

答案 2 :(得分:0)

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

  

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

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

答案 3 :(得分:0)

如果在同一个脚本中导出变量,则需要使用两个 $$ 而不是 $, 如果您的 Makefile 看起来像这样:

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

init.sh 脚本中导出变量 FOO

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

这样当你运行 make target 时,在脚本运行之前定义的环境变量 HOMEPATH 将只使用一个 $ 显示,但是环境变量 在同一脚本中导出的 FOO 需要 $$ 才能显示