我的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是。
这是可能吗?
我最终找到了我的问题的解决方案。
原则上,它按照@utopia的建议进行操作,但是以自动化的方式:我的库的最终用户不需要设置(甚至不需要知道)FindOtherLibrary.cmake。它将自动导入MyLibraryConfig.cmake。
为此,我安装FindOtherLibrary.cmake了MyLibraryConfig.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(仅适用于配置模式)。
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |