我正在尝试从CMake项目导出库。在内部,我已将此库分解为多个子目标。我现在想要导出完整的公共库,而不需要我的私有库二进制文件。以下不起作用。
cmake_minimum_required(VERSION 3.2)
project(export-mwe)
add_library(priv priv.cpp)
add_library(exp-lib exp-lib.cpp)
target_link_libraries(exp-lib PRIVATE priv)
install(TARGETS exp-lib EXPORT export-mwe DESTINATION lib)
install(EXPORT export-mwe DESTINATION .)
当我尝试生成此项目时,我收到错误。
CMake Error: install(EXPORT "export-mwe" ...) includes target "exp-lib" which requires target "priv" that is not in the export set.
如何在此示例中仅导出exp-lib
,而无需导出priv
?
答案 0 :(得分:0)
如果您将库exp-lib
与另一个共享库priv
链接(甚至私下),则CMake在将其他可执行文件与您的主库链接时需要注意该链接。因此,私人链接的信息是stored in the export file:
...告诉导入CMake它需要确保链接器可以 当应用程序链接到B时找到A,即使A不会出现 在链接线上。
至于
如何在此示例中仅导出exp-lib,而不必使用它导出priv?
使priv
库 STATIC 。有关与静态库的私有链接的信息不存储在导出文件中。