我的问题如下:
我将 OpenSSL 作为静态库(libcrypto.a
和libssl.a
)。
使用 MSys2 / MinGW64 在Windows上编译。
除此之外,我还有一个基于OpenSSL
的小型自写库。
现在我想将Crypto lib
从OpenSSL
与My lib“捆绑”到一个“大”静态库,以便稍后在Windows上的其他应用程序中进行静态编译,而无需部署任何库。
CMakeLists.txt
文件会是什么样的?先决条件(OpenSSL
为static libs
)是否正确?
实际上将其编译为动态DLL
就像魅力一样。但我的静态库只包括我自己的库的符号,而不是OpenSSL
。
实际上我没有工作CMake
文件,所以我不能包含一个例子。我只是想找一个如何做的方向。
如何开始的简短建议将受到高度赞赏。
答案 0 :(得分:1)
如果您真正想要做的是将多个静态库合并为一个,为了方便外部消费者,您可能需要运行自定义命令来执行此操作(因为它不是经常进行的操作)。
使用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
个参数中,或者创建一个脚本模板,使用{{1}替换CMake生成时的值然后让自定义命令运行该脚本。
也就是说,如果外部消费者都在使用CMake,我会完全跳过这个,只需让你的库的安装过程生成CMake包配置文件,声明对OpenSSL库的依赖。
答案 1 :(得分:-1)
target_link_library()适用于add_executable()和add_library(),因此您应该可以:
add_library(yourlib STATIC ...)
target_link_libraries(yourlib lib1 lib2 ...)
(其中yourlib
是您的库,lib1
,...是您要捆绑的库。