提问者:小点点

使用 C Makefile.win 检测 i386 与 x64 for Windows?


抱歉,如果这个问题很明显,但我通常不会在 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


共1个答案

匿名用户

假设您的目标是主机,我相信您必须依赖环境变量。在我的电脑上(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 中。

相关问题