如何从 visual studio 远程构建 32 位 linux 模块?

How to build a 32 bit linux module remotely from visual studio?

我一直在尝试创建一个跨平台项目。 需要构建 32 位和 64 位二进制文​​件 (dll)。 我正在使用 Visual Studio 并选择 x86-Release 或 x64-Release 解决了 windows 的问题。

但对于 linux,它始终构建 64 位二进制文​​件。

经过搜索,我发现需要安装g++ multilib,并且需要将-m32标志传递给编译器和链接器。 我发现

set_target_properties(PROJECT_NAME PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")

将解决问题。

因此,为了构建一个 32 位 linux 二进制文件(以 .so 结尾的模块),我添加了上面的代码。

上面代码下面还有这段代码

if(WIN32)
    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
        message("WIN32 x64")
    else()
        message("WIN32 x32")
    endif()
else(WIN32)
    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
        message("LINUX x64")
    else()
        message("LINUX x32")
    endif()
endif(WIN32)

然而,它输出

1> [CMake] LINUX x64

所以它仍在构建 32 位版本。

我同时安装了 g++ 和 g++ multilib,但不确定 visual studio 调用的是哪一个。这可能是问题所在吗?

如评论中所述,CMAKE_SIZEOF_VOID_P 无法检测是否传递了 m32 标志。 所以我修改了这样的代码

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(OUTPUT_BITNESS 64)
else()
    set(OUTPUT_BITNESS 32)
endif()
if(FORCE_32)
    set_target_properties(PROJECT_NAME PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
    set(OUTPUT_BITNESS 32)
endif()

if(WIN32)
    if(OUTPUT_BITNESS EQUAL 64)
        message("WIN32 x64")
    else()
        message("WIN32 x32")
    endif()
else(WIN32)
    if(OUTPUT_BITNESS EQUAL 64)
        message("LINUX x64")
    else()
        message("LINUX x32")
    endif()
endif(WIN32

所以要编译 32 位,FORCE_32 变量必须设置为 1。