cmake 如何安装针对接口库进行私有链接的目标

cbjzeqam  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(164)

你好,开发者朋友,我现在使用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标记upon链接的逻辑,我不应该导出目标interfaceTargetLibrary
但是CMake给我一个错误(这个)

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

所以我的问题是,这是一个bug吗?还是我不明白的东西?很明显,你是否以某种方式实现了它。
我用的是CMake 3.7版。
编辑:找到了,如果有人感兴趣。这是因为,私人链接的库不会被打包在我导出的一个。所以,库的压缩机将需要,链接对接口TargetLibary
所以我也需要导出它。

fwzugrvs

fwzugrvs1#

由于它是私人链接,您可以使用以下技巧:CMake won't try to install an IMPORTED library
另请参阅"What is an INTERFACE IMPORTED library in CMake and what are its uses?"
我试图找到关于这种行为的官方文件,但我找不到。不过我确实找到了a related discussion ticket on kitware's repo

相关问题