66

我使用 CMake 和 CPack 配置和打包我的库。我已经编写了自己的 find-module: FindMyLib.cmake

如何告诉 CMake/CPack 将此文件添加到 CMake 模块目录中,以便未来的开发人员可以简单地指定FIND_PACKAGE(MyLib)使用我的库?

4

3 回答 3

69

您可以设置CMAKE_MODULE_PATH和分发您的自定义FindFoo.cmake项目。例如:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
于 2012-05-26T12:18:21.700 回答
51

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_packagefind_package在这种情况下,CMake 打包教程也很有用。

于 2012-05-26T12:58:52.477 回答
14

允许的最好方法

未来的开发人员可以简单地指定 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有更详细的说明

于 2016-01-17T12:57:31.547 回答