如何解决使用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 举报,一经查实,本站将立刻删除。