我有一个与 cmake 邮件列表中 描述 的问题非常相似的问题,其中我们有一个依赖于许多静态库的项目(所有这些库都是从各个子模块中的源代码构建的,每个都有自己的 CMakeLists.txt 描述每个库的构建过程),我’想组合成一个静态库以发布给消费者。我的库的依赖项可能会发生变化,我不想让这些变化进一步加重开发人员的负担。简洁的解决方案是将所有库捆绑到一个库中。
有趣的是,当将目标设置为 mylib
并像这样使用它时, target_link_libraries
命令并没有结合所有的静态数据。 .
target_link_libraries(mylib a b c d)
但是,奇怪的是,如果我将 mylib
项目作为可执行项目的子模块,并且仅在顶级可执行文件 CMAkeLists.txt 中链接到 mylib
,则该库似乎确实被合并了.即 mylib 是 27 MB,而不是当我将目标设置为仅构建 mylib
时的 3MB。
有一些解决方案描述了将库解包到目标文件中并重新组合( 此处 和 此处),但是当 CMake 似乎完全能够如上例中所述自动合并库时,这似乎非常笨拙。我缺少一个魔术命令,还是推荐的制作发布库的优雅方式?
原文由 learnvst 发布,翻译遵循 CC BY-SA 4.0 许可协议
Given the most simple working example I can think of: 2 classes,
a
andb
, wherea
depends onb
. .啊
a.cpp
bh
b.cpp
主文件
可以将它们编译成单独的静态库,然后使用自定义目标组合静态库。
使用 Apple 的
libtool
版本的 custom target 也可以正常工作。 . .仍然接缝好像应该有一个更整洁的方式。 .