安装CMake库:是否还为依赖项提供了查找模块?

oLe*_*Len 6 cmake

我的CMake库MyLibrary具有一个依赖关系OtherLibrary,我可以使用非标准 库导入该库FindOtherLibrary.cmake

我的图书馆OtherLibrary公开依靠:

target_link_libraries(MyLibrary PUBLIC OtherLibrary::OtherLibrary)
Run Code Online (Sandbox Code Playgroud)

当我安装MyLibrary(与一起MyLibraryConfig.cmake),并且用户想要链接到它时,因此他们需要import OtherLibrary

是否有关于如何分配一个很好的做法FindOtherLibrary.cmake一起MyLibrary


理想情况下,如果其中包含类似以下内容,则可以从安装的配置文件中自动MyLibrary导入,从而使用户更轻松OtherLibraryMyLibraryConfig.cmake

include(CMakeFindDependencyMacro)
find_dependency(OtherLibrary)
Run Code Online (Sandbox Code Playgroud)

并且知道在哪里FindOtherLibrary.cmake是。

这是可能吗?

oLe*_*Len 5

我最终找到了我的问题的解决方案。

原则上,它按照@utopia的建议进行操作,但是以自动化的方式:我的库的最终用户不需要设置(甚至不需要知道)FindOtherLibrary.cmake。它将自动导入MyLibraryConfig.cmake

为此,我安装FindOtherLibrary.cmakeMyLibraryConfig.cmake

install(FILES
          /path/to/MyLibraryConfig.cmake
        DESTINATION
          lib/cmake/MyLibrary
        )
install(FILES
          /path/to/FindOtherLibrary.cmake
        DESTINATION
          lib/cmake/MyLibrary/Modules
        )
Run Code Online (Sandbox Code Playgroud)

MyLibraryConfig.cmake我设置如何导入它:

include(CMakeFindDependencyMacro)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/Modules/")
find_dependency(OtherLibrary REQUIRED)
Run Code Online (Sandbox Code Playgroud)

请注意,我设置该变量CMAKE_MODULE_PATH是因为无法在find_package或中指定查找模块的位置find_dependency(仅适用于配置模式)。