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

Why does CMake EXPORT require static libraries used to build a shared library?

我正在尝试让其他项目更容易 link 针对我们随项目分发的共享库。当我尝试利用 EXPORT 机制时,CMake 抱怨我没有在导出集中包含用于构建共享库的静态库。这对我来说似乎没有必要,因为其他项目只需要 link 针对共享库,而我真的不想安装静态库。这似乎与 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)