[英]Environment variables in Windows makefiles
我在使用mingw32-make
的makefile
有以下内容
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.