我在使用makefile
mingw32-make
中有以下内容
ifeq (%PROCESSOR_ARCHITECTURE%,AMD64)
ARCH ?= 64
else
ARCH ?= 32
endif
由于某种原因,PROCESSOR_ARCHITECTURE
未返回正确的值。我也尝试了$(PROCESSOR_ARCHITECTURE)
和$(%PROCESSOR_ARCHITECTURE%)
。不确定这里有什么问题。
答案 0 :(得分:1)
正如您在评论中发现并注意到的那样,对于32位应用程序,Windows会将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))
答案 1 :(得分:0)
就涉及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
。