【问题标题】:How to install your custom CMake-Find module如何安装您的自定义 CMake-Find 模块
【发布时间】:2012-06-01 17:07:01
【问题描述】:

我使用 CMake 和 CPack 配置和打包我的库。我已经编写了自己的查找模块:FindMyLib.cmake

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

【问题讨论】:

    标签: cmake cpack


    【解决方案1】:

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

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

    【讨论】:

    • 这也是这里建议的方法:cmake.org/Wiki/…
    • 这不是问题的答案。这个想法不是 MyLib 的用户如何包含他的FindMyLib.cmake,而是如何安装它以便最终用户可以按原样使用它。您所描述的要求 MyLib 的用户将 .cmake 文件复制到他们自己的开发目录树下...
    • Modules 中的大写 M 有什么特殊原因吗?
    【解决方案2】:

    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 也很有用。

    【讨论】:

    • 您应该将此标记为正确答案@goocreations。另外,这个解决方案太漂亮了。
    • 这对我不起作用(使用 cmake 3.3.1)。根据文档,“CMake 在 CMAKE_MODULE_PATH 中搜索名为 Find.cmake 的文件,然后是 CMake 安装”。但是,我似乎无法找到那是什么。它会在您上面列出的路径中搜索包配置文件,而不是 CMake-Find 模块。
    • CMake如何确定&lt;prefix&gt;的值?
    • 我认为这些路径仅适用于&lt;name&gt;Config.cmake 文件,不适用于find&lt;name&gt;.cmake
    【解决方案3】:

    最好的办法

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 2020-11-02
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多