Windows makefile 中的环境变量

use*_*616 5 windows mingw makefile environment-variables

makefile我正在使用以下内容mingw32-make

ifeq (%PROCESSOR_ARCHITECTURE%,AMD64)
    ARCH ?= 64
else
    ARCH ?= 32
endif
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*urr 1

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

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

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

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

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

$(info $(ARCH))
Run Code Online (Sandbox Code Playgroud)