Cmake:如何静态链接包到共享库?

8zzbczxx  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(215)

我想创建一个.dll库,它的所有依赖项都打包在.dll中。
然而,似乎没有一种简单的方法可以用Cmake来实现这一点。我的设置:

cmake_minimum_required(VERSION 3.0.0)
project(Main VERSION 0.1.0)

add_library(Main SHARED Main.cpp)

find_package(libzippp REQUIRED)

target_link_libraries(Main PRIVATE libzippp::libzippp)

这将产生Main.dlllibzippp.dll
我希望将libzippp.dll打包(静态链接)到Main.dll中。

3htmauhk

3htmauhk1#

当然,你不能把一个DLL打包到另一个DLL中。你必须首先把libzippp做成一个静态库。要做到这一点,在CMake命令行中把BUILD_SHARED_LIBS设置为NO来构建libzippp。这样,当你转到find_package时,libzippp::libzippp就会变成一个静态库。
这很容易显示以下步骤:

$ git clone git@github.com:ctabin/libzippp.git
$ cmake -S libzippp -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=NO -DCMAKE_INSTALL_PREFIX=$PWD/local -DLIBZIPPP_BUILD_TESTS=NO
$ cmake --build build --target install
$ tree local
local/
├── include
│   └── libzippp
│       └── libzippp.h
├── lib
│   └── libzippp_static.a
└── share
    └── libzippp
        ├── FindLIBZIP.cmake
        ├── libzipppConfig.cmake
        ├── libzipppConfigVersion.cmake
        ├── libzipppTargets.cmake
        └── libzipppTargets-release.cmake

相关问题