如何安装自定义CMake-Find模块

时间:2012-05-26 11:41:43

标签: cmake cpack

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

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

3 个答案:

答案 0 :(得分:57)

您可以设置CMAKE_MODULE_PATH并将自定义FindFoo.cmake与您的项目一起分发。例如:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")

答案 1 :(得分:45)

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搜索方式的详细信息,请参阅documentation for find_package。在这种情况下,CMake packaging tutorial也很有用。

答案 2 :(得分:11)

允许的最佳方式

  

未来的开发人员可以简单地指定FIND_PACKAGE(MyLib)来使用我的库

是编写包配置文件(-config.cmake),而不是查找模块。 然后应该将包配置文件安装在FindPackage模块查找的文件夹之一(类似于/ lib / package /或/ lib / cmake / package,第二个是首选)

FindPackage模块会自动加载配置文件,如果它可以在那里找到它。

CMake wiki在https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Packaging

上有更详细的说明