如何在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)
答案 0 :(得分:2)
你的问题并不完全清楚,但那里有许多明显的错误。
首先,您在Windows下运行make
,但编写食谱就好像它们是shell脚本一样。在Windows上情况并非如此(默认情况下至少如此)。
因此尝试将export
作为失败的外部命令运行(因此关于CreateProcess
的错误消息失败)。
您也没有向我们展示实际抛出该错误的目标。
此外,您希望配方第一行的export
和赋值对配方体中的第二行(对于start
目标)有效。
但事实并非如此。 makefile目标配方中的每一行都在独立的环境中运行。因此,export
目标配方第一行的START
和分配不会影响第二行。
为此,您需要使用一条长行或使用最新版make
的{{3}}功能。
此外,您在配方中使用$(NODE_ENV)
,期望它是您之前设置的shell变量。甚至忽略了前面提到的不正确的问题。
make将扩展$(NODE_ENV)
作为make变量之前它甚至可以运行配方。对于shell变量,您的意思是${NODE_ENV}
或$NODE_ENV
。 那对于制作食谱说,您实际上需要转义$
,因为${NODE_ENV}
也是有效的变量扩展。因此,您需要$${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%