【发布时间】:2026-02-20 12:20:06
【问题描述】:
我正在使用 NMake 制作一个 makefile。我有一些实用程序可以将一个文件转换为 CPP 文件。该实用程序需要在会话期间设置特定的 Windows 环境变量。我可以在 Makefile 中设置这个变量,还是需要在调用 NMake 之前创建一个设置变量的批处理脚本?
【问题讨论】:
我正在使用 NMake 制作一个 makefile。我有一些实用程序可以将一个文件转换为 CPP 文件。该实用程序需要在会话期间设置特定的 Windows 环境变量。我可以在 Makefile 中设置这个变量,还是需要在调用 NMake 之前创建一个设置变量的批处理脚本?
【问题讨论】:
使用!if [set ...]trick:
!if [set myvar=1]
!endif
# Macro values are fine, too, of course:
MYVAL=preprocessed
!if [set myvar=$(MYVAL)]
!endif
# Proof that myvar has really become an env. var. (see the output):
myvar=This is propagated to the env now!
mymacro=(But this isn't, of course.)
# This handy form works, too:
!if [set myA=1] || [set myB=2]
!endif
# But this will *NOT* make myX an env. var., if it hasn't been set yet:
!if [set myX=$(myX)]
!endif
myX=So you'll not see this...
all:
set my
输出:
D:\tmp>nmake -f test.mak
Microsoft (R) Program Maintenance Utility Version 14.21.27702.2
Copyright (C) Microsoft Corporation. All rights reserved.
set my
myA=1
myB=2
myvar=This is propagated to the env now!
【讨论】:
调用nmake 时存在的环境变量ENVAR 被继承
作为同名的nmake 宏。如果您更改 ENVVAR 的值
生成文件,例如:
ENVAR=newval
然后环境变量ENVAR 假设命令的值newval
由 makefile 运行。目标:
foo:
echo "%ENVAR%"
将回显newval。
但你不能创建这样的环境变量ENVAR。所以你会
至少必须先创建要使用的环境变量
调用nmake
【讨论】: