cmake - 为什么 CMake EXPORT 需要用于构建共享库的静态库?

标签 cmake shared-libraries static-libraries

我试图让其他项目更容易链接到我们与我们的项目一起分发的共享库。当我尝试利用 EXPORT 机制时,CMake 提示我没有在导出集中包含用于构建共享库的静态库。这对我来说似乎没有必要,因为其他项目只需要链接共享库,而我真的不想安装静态库。这似乎与this bug非常相似,但我可能只是误解了这一切是如何运作的。这是一个最小的例子:

CMAKE_MINIMUM_REQUIRED(VERSION 3.2.1) 
PROJECT(ExportTest)

ADD_LIBRARY(myStaticLib STATIC staticLib.c)
ADD_LIBRARY(mySharedLib SHARED sharedLib.c)
TARGET_LINK_LIBRARIES(mySharedLib myStaticLib)

INSTALL(TARGETS mySharedLib EXPORT myExport DESTINATION lib)
INSTALL(EXPORT myExport DESTINATION include)

这会导致以下错误消息:
CMake Error: install(EXPORT "myExport" ...) includes target "mySharedLib"
which requires target "myStaticLib" that is not in the export set.

最佳答案

使用时 target_link_libraries 像您一样,默认情况下库依赖项是可传递的。尝试:

target_link_libraries(mySharedLib PRIVATE myStaticLib)

关于cmake - 为什么 CMake EXPORT 需要用于构建共享库的静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40183810/

相关文章:

c++ - 使用 CMake 生成的系统在构建时运行 Google 测试

java - 解决 axis2 和 OC4J 库冲突

c - 在静态库中定义枚举

CMake虚拟目标取决于其他目标

CMake:从文件中读取内部版本号以设置变量

linux - `Cmake` 在调用 `target_link_libraries(target_name, library_name_without_postfix)` 时更喜欢链接到哪个库?

c++ - 如何处理加载错误共享库版本的情况

c++ - 告诉dlopen先在哪个库中搜索符号

c - 如何在C程序中使用静态pthread库(Visual Studio 2008)?

iPhone——在项目中嵌套库而没有链接器错误?