在Makefile里设置环境变量由JOM / NMAKE阅读

问题描述 投票:1回答:2

我有一个生成文件,其被设计为与NMAKE工作(在MS视觉工作室命令行提示)。该makefile本身将需要像一个批处理文件MY_SAY_SOMETHING其他工具的环境变量test.bat。这工作很细带nmake

不过,我想使用Qt的jom,而不是通过使用选项-J几个处理器内核的使用情况,以加快我的构建过程。该工具jomis认为是根据它的Qt的nmake克隆,所以makefile应该是兼容的。

问题是:jom不会在Windows机器上设置环境变量!在方式至少不是NMAKE支持它。

所以我的问题是:我如何设置环境变量,jom


这是显示我的问题尽可能短的例子:

生成文件:

!IF [set MY_SAY_SOMETHING="my super message"]
!ENDIF

all:
    @test.bat

test.bat的:

@echo off
echo THIS IS MY SUPER MESSAGE "%MY_SAY_SOMETHING%"

现在,我打电话与NMAKE生成文件(从Visual Studio命令行提示符)。这看起来是这样的:

d:\> NMAKE

微软(R)程序维护实用程序版本10.00.30319.01版权所有(C)微软公司。版权所有。

THIS IS MY SUPER MESSAGE “” 我的超级信息 “”

当我打电话JOM(无论是从视觉工作室命令行提示符或常规Windows CMD.EXE的提示),我只是得到这样的:

d:\>让我们

JOM 1.1.3 - 使您的内核

THIS IS MY SUPER MESSAGE “”

我也呼吁-Pnmakejom选项来获得有关生成文件是如何解释的更多信息。然而,我的环境变量印有nmake,但不与jom。我也试过选项-E(覆盖环境变量宏)具有相同的结果。

也许这是在jom的错误...

windows qt makefile environment-variables nmake
2个回答
0
投票

生成文件:

all: .MY_ENVIRONMENT
    @test.bat

.MY_ENVIRONMENT:
    @set MY_SAY_SOMETHING="my super message"

既要对付nmakejom工作:

>nmake -l
THIS IS MY SUPER MESSAGE ""my super message""

>jom -l
THIS IS MY SUPER MESSAGE ""my super message""

0
投票

编辑:这是我的第一个答案,探索三个想法不工作。看到我的第二个答案的一个实际的解决方案。


这是一个多回答评论的,但它确实提出一个变通。

下面的Makefile的输出:

!IF [echo Test 1:] && [set MY_SAY_SOMETHING="my super message"] && [set MY]
!ENDIF

!IF [echo Test 2: && set MY_SAY_SOMETHING="my unsuper message" && set MY]
!ENDIF

WORK_AROUND = set MY_SAY_SOMETHING="this is a possible work-around"

all:
    @echo Test 3:
    @-call set MY
    @test.bat
    @echo Test 4:
    @$(WORK_AROUND)
    @call set MY
    @test.bat

nmake

>nmake

Microsoft (R) Program Maintenance Utility Version 14.10.25019.0
Copyright (C) Microsoft Corporation.  All rights reserved.

Test 1:
MY_SAY_SOMETHING="my super message"
Test 2:
MY_SAY_SOMETHING="my unsuper message"
Test 3:
MY_SAY_SOMETHING="my super message"
THIS IS MY SUPER MESSAGE ""my super message""
Test 4:
MY_SAY_SOMETHING="this is a possible work-around"
THIS IS MY SUPER MESSAGE ""this is a possible work-around""

jom

>jom
Test 1:
Environment variable MY not defined
Test 2:
MY_SAY_SOMETHING="my unsuper message"

jom 1.1.3 - empower your cores

Test 3:
Environment variable MY not defined
THIS IS MY SUPER MESSAGE ""
Test 4:
MY_SAY_SOMETHING="this is a possible work-around"
THIS IS MY SUPER MESSAGE ""this is a possible work-around""

注1:nmake,测试2的输出是我所期望的,但它并没有“拿”。在试验3 set MY带给你的是在测试1套。

注2:jom,测试2给出了所需的输出,但同样没有“拿”。而测试1失败。

注3:在配方,需要对calljom上班set MY。这是可选的nmake

© www.soinside.com 2019 - 2024. All rights reserved.