CMake 与其他静态库一起构建静态库
CMake building a static library with other static library
我的问题如下:
我有 OpenSSL 作为静态库(libcrypto.a
和 libssl.a
)。
使用 MSys2/MinGW64 在 Windows 上编译。
除此之外,我还有一个基于 OpenSSL
.
的小型自写库
现在我想 "bundle" Crypto lib
从 OpenSSL
和我的库到 "big" 静态库,以便稍后在 [=42= 上的其他应用程序中静态编译] 没有部署任何库。
CMakeLists.txt
文件是什么样的?前提条件(OpenSSL
as static libs
)是否正确?
实际上将其编译为动态 DLL
就像一个魅力。但是我的静态库只包括我自己的库的符号,而不是来自OpenSSL
。
实际上我没有可用的 CMake
文件,所以我无法提供示例。我只是在寻找如何去做的方向。
如能提供有关如何开始的简短建议,我们将不胜感激。
target_link_library() works both for add_executable() and add_library(),所以你应该可以做到:
add_library(yourlib STATIC ...)
target_link_libraries(yourlib lib1 lib2 ...)
(其中 yourlib
是您的库,lib1
,...是您要捆绑的库。
如果您真正想做的是将多个静态库合并为一个,为了方便外部消费者,您可能需要 运行 自定义命令来执行此操作(因为它不是经常这样做)。
使用 GNU 工具链,执行此操作的命令可能如下所示(虽然未经测试):
${CMAKE_COMMAND} -E make_directory tempdir
cd tempdir
${CMAKE_AR} x $<yourlib:TARGET_FILE>
${CMAKE_AR} x ${OPENSSL_CRYPTO_LIBRARY}
${CMAKE_AR} x ${OPENSSL_SSL_LIBRARY}
${CMAKE_AR} cf ${CMAKE_BINARY_DIR}/bin/libyourmegalib.a *.o
cd ..
${CMAKE_COMMAND} -E remove_directory tempdir
然后您将使用 add_custom_command()
创建目标 运行 此脚本 - 将这些行作为 COMMAND
参数,或创建脚本模板,在 CMake 生成时替换值时间使用 configure_file()
,然后使用自定义命令 运行 该脚本。
就是说,如果外部消费者自己都在使用 CMake,我会完全跳过这一步,让您的库的安装过程生成声明对 OpenSSL 库的依赖项的 CMake 包配置文件。
我的问题如下:
我有 OpenSSL 作为静态库(libcrypto.a
和 libssl.a
)。
使用 MSys2/MinGW64 在 Windows 上编译。
除此之外,我还有一个基于 OpenSSL
.
现在我想 "bundle" Crypto lib
从 OpenSSL
和我的库到 "big" 静态库,以便稍后在 [=42= 上的其他应用程序中静态编译] 没有部署任何库。
CMakeLists.txt
文件是什么样的?前提条件(OpenSSL
as static libs
)是否正确?
实际上将其编译为动态 DLL
就像一个魅力。但是我的静态库只包括我自己的库的符号,而不是来自OpenSSL
。
实际上我没有可用的 CMake
文件,所以我无法提供示例。我只是在寻找如何去做的方向。
如能提供有关如何开始的简短建议,我们将不胜感激。
target_link_library() works both for add_executable() and add_library(),所以你应该可以做到:
add_library(yourlib STATIC ...)
target_link_libraries(yourlib lib1 lib2 ...)
(其中 yourlib
是您的库,lib1
,...是您要捆绑的库。
如果您真正想做的是将多个静态库合并为一个,为了方便外部消费者,您可能需要 运行 自定义命令来执行此操作(因为它不是经常这样做)。
使用 GNU 工具链,执行此操作的命令可能如下所示(虽然未经测试):
${CMAKE_COMMAND} -E make_directory tempdir
cd tempdir
${CMAKE_AR} x $<yourlib:TARGET_FILE>
${CMAKE_AR} x ${OPENSSL_CRYPTO_LIBRARY}
${CMAKE_AR} x ${OPENSSL_SSL_LIBRARY}
${CMAKE_AR} cf ${CMAKE_BINARY_DIR}/bin/libyourmegalib.a *.o
cd ..
${CMAKE_COMMAND} -E remove_directory tempdir
然后您将使用 add_custom_command()
创建目标 运行 此脚本 - 将这些行作为 COMMAND
参数,或创建脚本模板,在 CMake 生成时替换值时间使用 configure_file()
,然后使用自定义命令 运行 该脚本。
就是说,如果外部消费者自己都在使用 CMake,我会完全跳过这一步,让您的库的安装过程生成声明对 OpenSSL 库的依赖项的 CMake 包配置文件。