CMake-将多个库合并为一个

| 假设我有可执行文件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,请执行以下操作:创建一个新项目project2ѭ,该项目是从X,Y和Z的聚合源文件构建的。但是我想如果可能的话,您不会在SO上询问过。 如果您无法重建这些库,并且它们是作为共享库(dll / so)构建的,那么您很不走运。您可以尝试编写一个包装器库,该包装器隐藏X,Y和Z的所有内部结构,并将由应用程序A,B和C使用。 如果它们是作为静态库构建的,请查看此SO问题。由于静态库只不过是目标文件的存档,因此您可以从每个库中提取目标代码,然后用
ar
对其进行重新组合。 但是你为什么呢?假设您获得了仅依赖X的第四个应用程序D。无论如何,您将需要单独的库Y(除非您不想与所有库不必要地链接)。     

要回复问题请先登录注册