如何在 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 解决方案中同样有效

Nmake构建失败

使用 cygwin 从 Nmake 切换到 MinGW

为什么在构建静态版本的QT时出现NMAKE错误?

如何在 Redhat linux 机器上从 tar.xz 文件安装 nodejs?

在 Windows 上从源代码构建 NSIS(VS2012)