如何在makefile中设置环境变量?

How to set environment variables in makefile?

如何在 Windows 上的 makefile 中正确设置环境变量? 我收到关于 CreateProcess.

的错误
C:\>make.exe -f build.makefile start
export MALLOC_PERTURB_=110
process_begin: CreateProcess(NULL, export MALLOC_PERTURB_=110, ...) failed.
make (e=2): The system cannot find the file specified.
c:\testmake.makefile:4: recipe for target 'start' failed
make: *** [start] Error 2

START: 
    export NODE_ENV=110
    echo $(NODE_ENV)

你的问题不是很清楚,但有很多明显的错误。

首先,您 运行宁 make 在 Windows 下,但编写食谱就像 shell 脚本一样。 Windows 不是这种情况(至少默认情况下)。

所以 export 被尝试作为失败的外部命令 运行(因此出现关于 CreateProcess 失败的错误消息)。

您也没有向我们展示实际抛出该错误的目标。

此外,您希望配方第一行的 export 和分配对配方正文中的第二行有效(对于 start 目标)。

但事实并非如此。独立环境中 makefile 目标的配方 运行s 中的每一行。因此 exportSTART 目标配方第一行的赋值不会影响第二行。

为此,您需要使用一长行或使用 make.

最新版本的 .ONESHELL 功能

此外,您在食谱中使用了 $(NODE_ENV),期望它是您之前设置的 shell 变量。甚至忽略前面提到的不正确的问题。

make 将扩展 $(NODE_ENV) 作为 make 变量 ,然后 它甚至 运行 完全没有配方。您的意思是 ${NODE_ENV}$NODE_ENV 用于 shell 变量。 That 说对于 make 配方你实际上需要转义 $ 因为 ${NODE_ENV} 也是 一个有效的 make 变量扩展.所以你需要$${NODE_ENV}$$NODE_ENV

放在一起你最终会得到这个(假设你有一个 shell 可以使用的地方)。

SHELL := /path/to/your/shell

START:
        export NODE_ENV=110; \
        echo "$${NODE_ENV}"

(尽管此时您实际上并不需要 export,但这完全是另一个问题)。

但是如果你没有可以使用shell那么你就可以使用cmd.exe而且我不确定什么是等价的export 有(虽然我刚才说你不需要它)你最终得到这样的东西(完全未经测试):

START:
        NODE_ENV=110; \
        echo %NODE_ENV%