抱歉,如果这个问题很明显,但我通常不会在 Windows 上编译 C:
我正在尝试编写一个Makefile.win
,我需要与特定的* dll链接。在需要链接的库的子目录中,有一个 /x64
版本和一个 /i386
版本,即
.../libs/x64/library.dll
.../libs/i386/library.dll
对于Linux的Makefile,我能够简单地通过链接到共享对象
SPECIAL_LIB= .../libs/library.so
LIBS=-L{SPECIAL_LIB}
但是对于windows,有32位版本< code>i386和64位版本< code>x64。
我如何在Makefile.win
中检测windows操作系统是32位还是64位,并且只链接到正确的动态链接库(而不是其他)?
SPECIAL_LIB_32= .../libs/i386/library.dll
SPECIAL_LIB_64= .../libs/x64/library.dll
## check if 64-bit somehow
ifeq ($(strip $(OS)), "64bit machine")
LIBS=-L{SPECIAL_LIB_32
endif
## check 32-bit
ifeq ($(strip $(OS)), "32bit machine")
LIBS=-L{SPECIAL_LIB_64
endif
假设您的目标是主机,我相信您必须依赖环境变量。在我的电脑上(Win10)
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 中。