【问题标题】:What is the right place for FindXXX.cmake files for locally compiled libs?对于本地编译的库,FindXXX.cmake 文件的正确位置是什么?
【发布时间】:2011-07-28 14:27:36
【问题描述】:

我在 Linux 系统(顺便说一下,Eigen3)上手动安装了一个库(到 /usr/local)。有一个 FindEigen3.cmake 与 lib 捆绑在一起,但默认情况下没有安装在任何地方。

CMake 在 /usr/share/cmake-x.y/Modules 中查找其他模块,但将这些文件放在那里似乎不是解决问题的方法。 /usr/local 下是否有默认情况下也会扫描的等效位置?或者创建自定义库模块的标准方法是什么?

(虽然这个问题与编程没有严格的联系,但我认为库作者也可能会从另一端遇到同样的问题:手动安装时将这些文件放在哪里。)

【问题讨论】:

    标签: linux cmake


    【解决方案1】:

    在我们的项目中,我们将 FIndXXX.cmake 模块放在文件夹 project root dir/cmake/modules 中。为此,您必须在 project root dir/CMakeLists.txt 中指定(类似于 DLRdave 已经说过的):

    set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)  
    

    【讨论】:

      【解决方案2】:

      有关“find_package”命令,请参阅 CMake 文档中的 cmets:

      http://cmake.org/cmake/help/v2.8.8/cmake.html#command:find_package

      它谈到了编写一个“项目配置”文件,以及在哪里安装它,这样 find_package(Eigen3) 就可以在没有 FindEigen3.cmake 查找模块的情况下工作......它很冗长,但信息在那里.

      另请参阅用户贡献的 wiki 页面,例如:

      https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/How-to-create-a-ProjectConfig.cmake-file

      【讨论】:

      • 虽然我没有时间(在过去的两周内:P)来检查这个,这就是我想要的,谢谢!
      【解决方案3】:

      在调用 find_package 之前,您需要设置 CMAKE_MODULE_PATH 以包含 FindEigen3.cmake 文件所在的目录。我相信:

      set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} <your path> )
      

      可以解决问题,但我目前没有测试可用的设置,因此您可能需要稍微调整一下该技术。

      【讨论】:

        猜你喜欢
        • 2013-09-25
        • 1970-01-01
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        • 1970-01-01
        相关资源
        最近更新 更多