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

Lat*_*ius 19 linux cmake

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

有/ usr/share/cmake-xy/Modules,其中CMake寻找其他模块,但是将这些文件放在那里似乎不是做事的方法.是否在/ usr/local下还有一个默认扫描的等效位置?或者创建自定义库模块的标准方法是什么?

(虽然这个问题与编程并没有严格的联系,但我认为图书馆作者也可能会遇到另一方面的相同问题:手动安装时将这些文件放在哪里.)

DLR*_*ave 6

有关"find_package"命令,请参阅CMake文档中的注释:

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

它说的是编写一个"project-config"文件,以及在哪里安装它,这样find_package(Eigen3)可以在没有FindEigen3.cmake查找模块的情况下工作......它很详细,但信息就在那里.

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

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


bed*_*uin 6

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

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


ltc*_*ltc 5

您需要设置CMAKE_MODULE_PATH以包括FindEigen3.cmake文件所在的目录,然后才能调用find_package。我相信:

set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} <your path> )
Run Code Online (Sandbox Code Playgroud)

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