Windows makefile中的环境变量

时间:2014-05-31 21:42:53

标签: windows makefile mingw environment-variables

我在使用makefile

mingw32-make中有以下内容
ifeq (%PROCESSOR_ARCHITECTURE%,AMD64)
    ARCH ?= 64
else
    ARCH ?= 32
endif

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

2 个答案:

答案 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