繁体   English   中英

Windows makefile中的环境变量

[英]Environment variables in Windows makefiles

我在使用mingw32-makemakefile有以下内容

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

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

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

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

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

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

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

$(info $(ARCH))

就涉及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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM