如何在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 中的每一行。因此 export
和 START
目标配方第一行的赋值不会影响第二行。
为此,您需要使用一长行或使用 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%
如何在 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 中的每一行。因此 export
和 START
目标配方第一行的赋值不会影响第二行。
为此,您需要使用一长行或使用 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%