如何安装私下链接到接口库的目标

How to install a target that link privately against an Interface library

本文关键字:链接 接口 目标 何安装 安装      更新时间:2023-10-16

你好开发人员朋友们,我已经使用CMake一段时间了,但我无法弄清楚如何安装目标:

  • 是导出集的一部分
  • 私下链接到接口库

导出集是使用命令创建的

install(EXPORT MyExportSet DESTINATION MyExportDir
NAMESPACE Project FILE ProjectTargets.cmake)

接口库的链接是这样完成的

target_link_libraries(exportedTarget
PRIVATE interfaceTargetLibrary
)

最后,我像这样导出目标:

install(TARGETS exportedTarget EXPORT MyExportSet
ARCHIVE DESTINATION lib/static
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include
)

这个看起来对我来说是正确的,并且遵循 PRIVATE 标志 uppon 链接的逻辑,我不应该导出目标接口目标库

但是CMake给我一个错误(这个(

CMake Error: install(EXPORT "ProjectTargets" ...) includes target"exportedTargets" which requires target "interfaceTargetLibrary" that is not in the export set.

所以我的问题在这里,这是一个错误吗? 还是我不明白的东西?显然,您是否取得了成就,以使它以某种方式工作。

我使用的是 CMake 3.7 版。

编辑:发现,如果有人感兴趣。这是因为,私下链接的库不会打包在我导出的库中。因此,库的comsummer也需要链接到interfaceTargetLibary
,所以我也需要导出它。

由于它是私下链接的,因此您可以使用以下技巧: CMake 不会尝试安装IMPORTED库。

另请参阅"CMake 中的INTERFACE IMPORTED库是什么,它的用途是什么?

我试图找到有关这种行为的官方文件,但我无法找到。不过,我确实在套件软件的存储库中找到了相关的讨论票。