使用C ++ Makefile.win检测Windows的i386 vs x64?

问题描述

很抱歉,如果这个问题很明显,但是我通常不会在Windows上编译C ++:

我正在尝试编写一个mvn spring-boot:run -Drun.jvmArguments="-Dfile.encoding=UTF-8",据此我需要链接到特定的* dll。在需要链接的库子目录中,有一个Makefile.win版本和一个/x64版本,即

/i386

对于Linux的Makefile,我可以通过以下方式简单地链接到共享对象

.../libs/x64/library.dll
.../libs/i386/library.dll

但是对于Windows,有32位版本SPECIAL_LIB= .../libs/library.so LIBS=-L{SPECIAL_LIB} 和64位版本i386

我如何才能在x64中检测Windows操作系统是32位还是64位,并且仅链接到正确的动态链接库(而不链接到另一个)?像这样:

Makefile.win

解决方法

假设您的目标是主机,我相信您将必须依赖环境变量。在我的PC(Win10)上,> echo %PROCESSOR_ARCHITECTURE%产生AMD64。根据{{​​3}}文章,应该为PROCESSOR_ARCHITEW6432,但事实并非如此。因此,以下内容在多个Windows版本上使用应该非常安全:

set(arch 0)
ifeq ($(OS),Windows_NT)
    CCFLAGS += -D WIN32
    ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
        set(arch 64 FORCE)
    else
        ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
            set(arch 64 FORCE)
        endif
        ifeq ($(PROCESSOR_ARCHITECTURE),x86)
            set(arch 32 FORCE)
        endif
    endif

然后,在链接库时,只需将${SPECIAL_LIB}${arch}并置起来即可,前提是它们已在cmake中定义。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...