CMake:创建包含依赖项而不是单独的 dll 的 DLL

CMake: Create DLL including dependencies instead of separate dll's

我正在用 C++ 为 Windows 和 Mac OS 编写 SDK,并且我正在使用 CMake。 windows,我希望编译后的 DLL 包含所有必要的依赖项,而不是为我正在使用的所有第三方库提供单独的 DLL。

以下是 MakeFile 的相关部分:

find_package(OpenSSL REQUIRED)
find_package(CURL CONFIG REQUIRED)
find_package(nlohmann_json 3.2.0 REQUIRED)
find_package(spdlog REQUIRED)
find_package(unofficial-sqlite3 CONFIG REQUIRED)
....
add_library(${PROJECT_NAME} SHARED ${SRC_FILES})
...
target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::Crypto CURL::libcurl nlohmann_json::nlohmann_json spdlog::spdlog_header_only unofficial::sqlite3::sqlite3)

这会生成以下单独的 DLL:

fmt.dll
libcrypto-1_1.dll
libcurl.dll
sqlite3.dll
zlib1.dll

是否可以创建一个包含所有依赖项的库,就像在 Mac OS 上使用生成的 dylib 一样?

为简单起见,我使用 Vcpkg,但您应该将依赖项编译为静态库而不是共享库。

如果您使用的是 vcpkg,则可以像这样静态安装依赖项 vcpkg.exe install openssl:x86-windows-static

确保 运行 CMake 的 VCPKG_TARGET_TRIPLET 设置为 x86-windows-static 或您使用的任何平台。

如您所见,example.dll 现在静态链接到 OpenSSL。

干杯