问题描述
很抱歉,如果这个问题很明显,但是我通常不会在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中定义。