假设我有可执行文件 A、B、C,并且有外部库 X、Y、Z
SET(EXTERNAL_LIB X Y Z)
TARGET_LINK_LIBRARIES(A, ${EXTERNAL_LIB})
TARGET_LINK_LIBRARIES(B, ${EXTERNAL_LIB})
TARGET_LINK_LIBRARIES(C, ${EXTERNAL_LIB})
但是,如果我想象这一点(使用cmake --graphviz
选项,我得到一个复杂的二分图,其中包含从每个可执行文件 A、B 和 C 到每个库 X、Y 和 Z 的边。
我想知道是否有一种方法可以将所有库合并为一个。
所有这些都在一定程度上取决于您的平台、编译器和库的类型:
如果您可以自己构建 X、Y、Z:创建一个新项目XYZ
,从 X、Y 和 Z 的聚合源文件构建。但我想如果这是可能的,你就不会问这样的问题了。
如果您无法重建库并且它们是作为共享库(dll/so)构建的,那么您就不走运了。您可以尝试编写一个包装器库,它隐藏 X、Y 和 Z 的所有内部结构,并将由应用程序 A、B 和 C 使用。
如果它们被构建为静态库,请看一下这个问题 https://stackoverflow.com/questions/665752/combining-static-libraries。因为静态库只不过是目标文件的存档,所以您可以从每个库中提取目标代码并将它们重新组合ar
.
但你为什么要这么做呢?假设您有第四个应用程序 D,它仅依赖于 X。那么您无论如何都需要单独的库 Y(除非您希望不必要地链接所有库)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)