【发布时间】:2017-12-08 18:39:52
【问题描述】:
我的 CMake 库 MyLibrary 具有对 OtherLibrary 的依赖项,我使用 非标准 FindOtherLibrary.cmake 导入。
我的库依赖于 OtherLibrary 公开:
target_link_libraries(MyLibrary PUBLIC OtherLibrary::OtherLibrary)
当我安装MyLibrary(连同MyLibraryConfig.cmake),并且用户想要链接它时,他们需要导入OtherLibrary。
是否有关于如何将FindOtherLibrary.cmake 与MyLibrary 一起分发的良好做法?
理想情况下,如果 OtherLibrary 包含类似的内容,则可以通过从已安装的配置文件 MyLibraryConfig.cmake 中自动导入 OtherLibrary 来使 MyLibrary 的用户更轻松
include(CMakeFindDependencyMacro)
find_dependency(OtherLibrary)
并且知道FindOtherLibrary.cmake 在哪里。
这可能吗?
【问题讨论】:
-
不明白你的问题。
When I install 'MyLibrary' (together with 'MyLibraryConfig.cmake')- 在这种情况下,您的配置文件已经包含指向您和其他库的路径以及它们之间的适当关系。所以当用户链接MyLibrary目标时,它会自动链接OtherLibrary。不需要FindOtherLibrary.cmake脚本。 -
@Tsyvarev 你是对的,只要
OtherLibrary的路径是硬编码的。但是,如果FindOtherLibrary.cmake定义了我更喜欢的导入目标,MyLibrary的用户也必须能够“自行”找到OtherLibrary。 -
如果您不想要硬编码路径,您应该提供
FindMyLibrary.cmake脚本而不是MyLibraryConfig.cmake。为了与您的图书馆合作,用户需要使用该脚本发送他(她)的项目,...以及您在文档中描述的所有其他脚本(并相应地调整 CMAKE_MODULE_PATH)。所以你可以提供FindOtherLibrary.cmake和FindMyLibrary.cmake。 -
@Tsyvarev 在这种情况下,我有不同的看法:它会打败整个观点!在我看来,
MyLibraryConfig.cmake优于FindMyLibrary.cmake,因为它能够按照您编译交付的MyLibrary的方式设置所有依赖项,而在FindMyLIbrary.cmake中则需要手动指定。理想情况下,OtherLibrary的开发人员也会提供OtherLibraryConfig.cmake,但事实并非如此,因此我的 SO 问题。
标签: cmake