jom / nmake读取MakeFile中的环境变量



i有一个makefile,旨在与Nmake一起使用(在MS Visual Studio命令行提示中)。makefile本身设置了其他工具(例如batchfile test.bat)所需的环境变量MY_SAY_SOMETHINGnmake

可以很好地工作

但是,我想使用QT的jom而不是使用选项-J的多个处理器内核来加快我的构建过程。该工具jom根据QT认为是nmake的克隆,因此makefile应该兼容。

问题是jom在Windows机器上未设置环境变量!至少不以Nmake支持它的方式。

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


这是显示我的问题的最短示例:

makefile:

!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调用Makefile(来自Visual Studio命令行提示符)。看起来这样:

d:> nmake

Microsoft(R)程序维护实用程序版本10.00.30319.01 版权(C)Microsoft Corporation。保留所有权利。

这是我的超级消息"我的超级消息"

当我调用JOM(来自Visual Studio命令行提示符或常规Windows CMD.EXE提示)时,我只能得到:

d:> jom

JOM 1.1.3-授权您的核心

这是我的超级消息"

我还为nmakejom称为-P选项,以获取有关如何解释Makefile的更多信息。但是,我的环境变量是用nmake打印的,但没有jom。我还尝试了具有相同结果的选项-E(覆盖环境变量宏)。

也许这只是jom ...

中的错误

makefile:

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""

编辑:这是我的第一个答案,探索了三个想法 not 工作的想法。有关实际解决方案,请参见我的第二个答案。


这比答案更像是一个评论,但它确实暗示了一个工作。

以下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:在食谱中,jom需要CC_27才能使set MY工作。nmake是可选的。

在makefile中您可以写:

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

这不应该打破nmake,而应修复jom。

最新更新