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

goo*_*ons 52 cmake cpack

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

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

sim*_*ont 61

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

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
Run Code Online (Sandbox Code Playgroud)

  • 这不是问题的答案.我的想法不是*MyLib*的用户如何包含他的`FindMyLib.cmake`,而是如何安装它以便最终用户可以按原样使用它.您所描述的内容要求*MyLib*的用户将.cmake文件复制到他们自己的开发目录树下... (8认同)
  • 这也是这里建议的方法:http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries#Using_external_libraries_that_CMake_doesn.27t_yet_have_modules_for (6认同)

Fra*_*ser 47

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)
Run Code Online (Sandbox Code Playgroud)


有关搜索方式的完整详细信息,请参阅文档find_packagefind_package.在这种情况下,CMake打包教程也很有用.

  • 这对我不起作用(使用cmake 3.3.1).根据文档,"CMake在CMAKE_MODULE_PATH中搜索名为Find <package> .cmake的文件,然后搜索CMake".但是,我似乎无法找到那是什么.它会搜索上面列出的包配置文件的路径,而不是CMake-Find模块. (3认同)
  • 您应该将此标记为正确答案@goocreations.此外,这是一个非常好的解决方案. (2认同)
  • 这是通过 [`CMAKE_SYSTEM_PREFIX_PATH`](https://cmake.org/cmake/help/v3.6/variable/CMAKE_SYSTEM_PREFIX_PATH.html) 或 [`CMAKE_PREFIX_PATH`](https://cmake.org/cmake/help /v3.6/variable/CMAKE_PREFIX_PATH.html) (2认同)

Tri*_*ian 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