【问题标题】:Environment variables in Windows makefilesWindows makefile 中的环境变量
【发布时间】:2014-07-21 09:38:15
【问题描述】:

我在makefile 中有以下内容,我正在与mingw32-make 一起使用

ifeq (%PROCESSOR_ARCHITECTURE%,AMD64)
    ARCH ?= 64
else
    ARCH ?= 32
endif

由于某种原因,PROCESSOR_ARCHITECTURE 没有返回正确的值。我也试过$(PROCESSOR_ARCHITECTURE)$(%PROCESSOR_ARCHITECTURE%)。不知道这里出了什么问题。

【问题讨论】:

  • echo %PROCESSOR_ARCHITECTURE% 返回什么? (在外壳中)。
  • 这很有趣,只需在 makefile 中回显 $(PROCESSOR_ARCHITECTURE) 即可返回 x86。不知道为什么和在 cmd shell 中运行不一样

标签: windows makefile mingw environment-variables


【解决方案1】:

正如您在 cmets 中发现并指出的那样,对于 32 位应用程序,Windows 会将 PROCESSOR_ARCHITECTURE 设置为 x86,即使它们实际上是在 64 位操作系统上运行(出于应用程序兼容性的目的,我会假设)。

如果您希望您的 makefile 确定底层操作系统的真正类型,请首先检查环境变量 PROCESSOR_ARCHITEW6432,它将告诉 32 位应用程序实际的操作系统架构。

如果未设置PROCESSOR_ARCHITEW6432,则回退到检查PROCESSOR_ARCHITECTURE。 Windows 仅在操作系统为 64 位且进程为 32 位时设置PROCESSOR_ARCHITEW6432

ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
    ARCH ?= 64
endif

ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
    ARCH ?= 64
else
    ARCH ?= 32
endif

$(info $(ARCH))

【讨论】:

  • 您能否详细说明此信息的来源?变量的名字多么有趣……
  • @kebs:这里有一些官方文档:msdn.microsoft.com/en-us/library/windows/desktop/aa384274.aspx 但是,他们记录它的方式至少令人困惑并且可以说是错误的。我假设该名称基于 MS 用于 Wow64 环境其他方面的 Wow6432 术语。
【解决方案2】:

就涉及make而言,访问变量的正确语法是$(PROCESSOR_ARCHITECTURE)

在 Linux 上,符号应该被“导出”以便使用 make 访问,我不知道在 Windows 上是否有类似的机制。

或者,您可以尝试以下语法:

ifeq "$(PROCESSOR_ARCHITECTURE)" "AMD64"
    ARCH ?= 64
else
    ARCH ?= 32
endif

另外,为了检查,将此虚拟配方添加到您的 makefile:

show:
    @echo "PROCESSOR_ARCHITECTURE=$(PROCESSOR_ARCHITECTURE)"

并在 shell 提示符处输入 make show

【讨论】:

  • 根据我的发现,$(PROCESSOR_ARCHITECTURE) 返回的不是 cpu 架构,而是应用程序编译的架构,所以对于 32 位 make,它给出 32。在 64 位 make 中,它给出 64。这很麻烦,因为即使是 64 位版本的 MinGW 也附带 mingw32-make。
  • 不能说,我的操作系统没有那个变量。但是我给出的答案合适吗?如果是,你能接受吗?
  • 不幸的是,问题不在于 makefile 本身,而在于正在使用的变量。我还没有找到返回实际操作系统架构的变量,而这个特定的变量只是返回编译为的架构,因为该变量是从 make 调用的。我只是简单地在 Windows 上默认为 32 位。
  • 好吧,我误解了你的问题,我虽然是 makefile 语法问题。
猜你喜欢
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 2015-02-01
  • 2021-05-01
  • 2016-04-28
  • 2013-10-28
相关资源
最近更新 更多