这就是我当前项目的样子,我正在尝试从该项目构建 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
还没有测试过它,但我的猜测是,在调用 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?