我有一个非常相似的问题,与CMake邮件列表上描述的问题(链接)非常相似。我们有一个依赖于许多静态库的项目(所有这些库都是从单独的子模块中构建的源代码,并且每个子模块都有自己的CMakeLists.txt文件来描述每个库的构建过程),我想将它们合并为一个静态库,以供消费者使用。我的库的依赖关系可能会发生变化,我不想给后面的开发人员带来更多负担。最好的解决方案是将所有库捆绑到一个单一的库中。
然而,奇怪的是,如果我将
有一些解决方案描述了将库解压缩为对象文件并重新组合(here和here),但当CMake似乎完全能够像上面的示例描述的那样自动合并库时,这似乎非常笨拙。我是否遗漏了某个神奇的命令,或者有没有推荐的优雅方法来制作发布库?
有趣的是,当将目标设置为mylib
并像下面这样使用target_link_libraries
命令时,它并不会将所有的静态库组合在一起。
target_link_libraries(mylib a b c d)
然而,奇怪的是,如果我将
mylib
项目作为可执行项目的子模块,并且仅在顶级可执行CMakeLists.txt文件中链接到mylib
,则库似乎已经合并。也就是说,mylib
大小为27 MB,而不是当我将目标设置为仅构建mylib
时的3MB。有一些解决方案描述了将库解压缩为对象文件并重新组合(here和here),但当CMake似乎完全能够像上面的示例描述的那样自动合并库时,这似乎非常笨拙。我是否遗漏了某个神奇的命令,或者有没有推荐的优雅方法来制作发布库?
--whole-archive
选项。 - Karsten Koop