CMake将共享库链接到静态库

Vel*_*kan 5 c c++ cmake

我正在将AutoTools项目移植到CMake。

AutoTools的作用:

  • 建立一些静态库
  • 建立一些共享库并将静态库链接到共享库
  • 构建可执行文件,将其链接到共享库

我已经设法使用CMake进行了以下操作:

  • 建立一些静态库- add_library(staticfoo <src>)
  • 建立一些共享库- add_library(sharedfoo SHARED <src>)并将它们链接-target_link_libraries(sharedfoo staticfoo)
  • 构建可执行文件,将其链接到共享库- target_link_libraries(exe sharedfoo),但这也再次将静态库拖入其中。

因此,可执行文件的结果链接命令除了共享外还具有静态库。这与AutoTools项目生成的命令不对应。

我已经尝试过了target_link_libraries(sharedfoo PRIVATE staticfoo),但这并不能将符号从静态库获取到共享库的接口中。

如何获得没有“传递”行为的符号?

(以与平台无关的方式)

Tsy*_*rev 5

据我所知,CMake不允许混合使用STATIC和SHARED库。

如果您的staticfoo库仅用作其他库/可执行文件的一部分,则可以将其定义为

add_library(staticfoo OBJECT <src>)
Run Code Online (Sandbox Code Playgroud)

并在构建其他库时用作某种来源:

add_library(sharedfoo SHARED <src> $<TARGET_OBJECTS:staticfoo>)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见有关add_library的文档