如何从cmake在window中构建32/64位dll?

问题描述 投票:0回答:1

这就是我当前项目的样子,我正在尝试从该项目构建 dll。我遇到的问题是我想将

lib1
构建为 64 位 dll,将
lib2
构建为 32 位 dll。
lib1
使用64位dll构建没有任何问题,但我似乎无法构建
lib2
的32位dll。

.
├── CMakeLists.txt
├── lib1
│   ├── CMakeLists.txt
│   └── file1.cpp
└── lib2
    ├── CMakeLists.txt
    └── file2.cpp

2 directories, 5 files

CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(multi_arch_lib)

add_subdirectory(lib1)
add_subdirectory(lib2)

lib1/CMakeLists.txt

set(TARGET lib1)
set(SRC file1.cpp)


add_library(${TARGET} SHARED ${SRC})

set_target_properties(${TARGET} PROPERTIES
        ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/my_lib
        LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/my_lib
        RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/my_lib
        )

lib2/CMakeLists.txt(我想用它构建 32 位 dll)

set(TARGET lib2)
set(SRC file2.cpp)

#set(CMAKE_GENERATOR_PLATFORM Win32 CACHE INTERNAL "")

add_library(${TARGET} SHARED ${SRC})

set_target_properties(${TARGET} PROPERTIES
        ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/my_lib
        LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/my_lib
        RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/my_lib
        COMPILE_OPTIONS  "-m32"  LINK_OPTIONS "-m32"
        )
# unset back to 64 bit
#set(CMAKE_GENERATOR_PLATFORM x64 CACHE INTERNAL "")

我尝试过

CMAKE_GENERATOR_PLATFORM
COMPILE_OPTIONS "-m32"  LINK_OPTIONS "-m32"
但两者似乎总是创建 64 位。

$file lib2/my_lib/Release/lib2.dll
lib2/my_lib/Release/lib2.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows

文件1.cpp

void function1(){}

文件2.cpp

void function2(){}

要生成解决方案文件,我这样做

cmake -A x64 -S . -B Build

c++ cmake
1个回答
0
投票

还没有测试过它,但我的猜测是,在调用 cmake 来创建构建/项目文件时,您必须通过架构类型来设置它:

The following generators are available on this platform (* marks default):
* Visual Studio 17 2022        = Generates Visual Studio 2022 project files.
                                 Use -A option to specify architecture.

尝试 x64 和/或 Win32?

© www.soinside.com 2019 - 2024. All rights reserved.