假设我有可执行文件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. / p>
我想知道是否有办法将所有库合并为一个。
答案 0 :(得分:4)
所有这些都取决于您的平台,编译器和库的类型:
如果您可以自己构建X,Y,Z:创建一个新项目XYZ
,根据X,Y和Z的聚合源文件构建。但我想如果这是可能的,你不会在SO上问过。
如果你不能重建lib并且它们被构建为共享库(dll / so),那你就不走运了。您可以尝试编写一个包装器库,它隐藏X,Y和Z的所有内部结构,并由应用程序A,B和C使用。
如果它们是作为静态库构建的,请查看this SO question。因为静态库不仅仅是目标文件的存档,您可以从每个库中提取目标代码并将它们与ar
重新组合。
但你为什么要这样?假设你得到第四个应用程序D,它只依赖于X.那么你无论如何都需要单独的库Y(除非你更愿意不必要地链接所有的库)。