如何在 x64 机器上从 nmake 访问 ProgramFiles 环境变量?
Posted
技术标签:
【中文标题】如何在 x64 机器上从 nmake 访问 ProgramFiles 环境变量?【英文标题】:How to access the ProgramFiles environment variable from nmake on x64 machines? 【发布时间】:2010-07-25 12:14:00 【问题描述】:我尝试获取ProgramFiles
环境变量的路径,它应该在x64
机器上扩展为C:\Program Files (x86)
,在x86
机器上扩展为C:\Program Files
。
如果我这样做,问题是在 nmake 文件中:
all:
echo $(PROGRAMFILES)
每次都会扩展为C:\Program Files
,这是错误的。
来自 x64 机器的环境详细信息:
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
:: this one is special, if will return different results based on current process x86/x64
ProgramFiles=C:\Program Files (x86) or C:\Program Files
PROCESSOR_ARCHITECTURE=x86 or x64
现在更新的问题是如何在 nmake 中获取 x86 程序文件的位置,这在 x86 和 x64 机器上都可以工作?
【问题讨论】:
【参考方案1】:这个表达式似乎可以在 64 位 Windows 7 上运行,nmake
可以在 32 位和 64 位中运行:
%%PROGRAMFILES(x86)%%
例如
LC = %%PROGRAMFILES(x86)%%\Microsoft SDKs\Windows\v7.0A\bin\lc.exe
【讨论】:
【参考方案2】:如果您使用的是 x64 机器,那么在 64 位程序的环境中,%ProgramFiles%
指向 C:\Program Files
是完全合法的。
获取 x86 对应项必须使用的变量是 %ProgramFiles(x86)%
。
可以通过评估在PROCESSOR_ARCHITECTURE
环境变量(例如设置为AMD64
)中设置的当前操作系统架构来确定使用哪一个。或者干脆尝试获取%ProgramFiles(x86)%
,如果为空则获取%ProgramFiles%
的内容。
另一种方法是启动 32 位 cmd.exe
并在那里运行您的 make。它位于C:\Windows\SysWOW64
。
【讨论】:
我更新了问题以更好地解释推理(主要是我需要这个值才能正确定位包含目录)。另外,如果您知道一种从注册表读取值的方法,但我很确定 nmake 不支持此功能。以上是关于如何在 x64 机器上从 nmake 访问 ProgramFiles 环境变量?的主要内容,如果未能解决你的问题,请参考以下文章
Qt .pro 转换为 nmake Makefiles 无法处理静态库,在 VS2008 解决方案中同样有效