CMake - 如何导出具有私有依赖项的库

时间:2017-11-28 14:50:31

标签: cmake

我正在尝试从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

1 个答案:

答案 0 :(得分:0)

如果您将库exp-lib与另一个共享priv链接(甚至私下),则CMake在将其他可执行文件与您的主库链接时需要注意该链接。因此,私人链接的信息是stored in the export file

  

...告诉导入CMake它需要确保链接器可以   当应用程序链接到B时找到A,即使A不会出现   在链接线上。

至于

  

如何在此示例中仅导出exp-lib,而不必使用它导出priv?

使priv STATIC 。有关与静态库的私有链接的信息不存储在导出文件中。