微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用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中定义。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。