我使用 CMake 和 CPack 配置和打包我的库。我已经编写了自己的 find-module: FindMyLib.cmake
。
如何告诉 CMake/CPack 将此文件添加到 CMake 模块目录中,以便未来的开发人员可以简单地指定FIND_PACKAGE(MyLib)
使用我的库?
您可以设置CMAKE_MODULE_PATH
和分发您的自定义FindFoo.cmake
项目。例如:
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
CMake 模块目录是 CMake 本身安装树的一部分,因此您不应该尝试在其中添加任何内容。
CMake 模块目录包含由 Kitware 编写或至少审查过的模块,并且在其中添加您自己的模块会给您的项目用户留下这样的印象,即您的项目也是如此。
您最好将 FindMyLib.cmake 安装到以下搜索的位置之一find_package
:
<prefix>/ (Windows) <prefix>/(cmake|CMake)/ (Windows) <prefix>/<name>*/ (Windows) <prefix>/<name>*/(cmake|CMake)/ (Windows) <prefix>/(lib/<arch>|lib|share)/cmake/<name>*/ (Unix) <prefix>/(lib/<arch>|lib|share)/<name>*/ (Unix) <prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/ (Unix) <prefix>/<name>.framework/Resources/ (Apple) <prefix>/<name>.framework/Resources/CMake/ (Apple) <prefix>/<name>.framework/Versions/*/Resources/ (Apple) <prefix>/<name>.framework/Versions/*/Resources/CMake/ (Apple) <prefix>/<name>.app/Contents/Resources/ (Apple) <prefix>/<name>.app/Contents/Resources/CMake/ (Apple)
有关如何搜索的完整详细信息,请参阅文档。find_package
find_package
在这种情况下,CMake 打包教程也很有用。
允许的最好方法
未来的开发人员可以简单地指定 FIND_PACKAGE(MyLib) 来使用我的库
是写一个包配置文件 (-config.cmake) ,而不是一个 Find 模块。然后应该将包配置文件安装在 FindPackage 模块查找的文件夹之一中(类似于 /lib/package/ 或 /lib/cmake/package 第二个是首选)
FindPackage 模块会自动加载配置文件,如果它可以在那里找到它。
CMake wiki 在https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Packaging有更详细的说明