FindXXX.cmake文件的本地编译库的正确位置是什么?

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

有/ usr / share / cmake-xy /模块,其中CMake寻找额外的模块,但是把这些文件放在那里似乎不是办法。 在/ usr / local下有一个等价的地方,默认情况下也是扫描的吗? 或者创build自定义库模块的标准方式是什么?

(虽然这个问题与程序devise没有严格的联系,但我认为,图书馆作者也可能会遇到同样的问题:手动安装的时候把这些文件放在哪里)

请参阅CMake文档中关于“find_package”命令的注释:

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

它提到了编写一个“project-config”文件,以及在哪里安装它,这样find_package(Eigen3)将在没有FindEigen3.cmake查找模块的情况下工作…它是冗长的,但是信息就在那里。

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

http://cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file

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

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

将做的伎俩,但我没有一个设置来测试目前可用,所以你可能不得不按摩技术一点。

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

设置(CMAKE_MODULE_PATH $ {CMAKE_SOURCE_DIR} / cmake / modules)