i有一个makefile,旨在与Nmake一起使用(在MS Visual Studio命令行提示中)。makefile
本身设置了其他工具(例如batchfile test.bat
)所需的环境变量MY_SAY_SOMETHING
。nmake
。
但是,我想使用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-授权您的核心
这是我的超级消息"
我还为nmake
和jom
称为-P
选项,以获取有关如何解释Makefile的更多信息。但是,我的环境变量是用nmake
打印的,但没有jom
。我还尝试了具有相同结果的选项-E
(覆盖环境变量宏)。
也许这只是jom
...
makefile:
all: .MY_ENVIRONMENT
@test.bat
.MY_ENVIRONMENT:
@set MY_SAY_SOMETHING="my super message"
将使用nmake
和jom
:
>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。