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

时间:2016-03-11 19:14:40

标签: gcc makefile gnu-make gnu

如何在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)

1 个答案:

答案 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%