开发者

What is the right place for FindXXX.cmake files for locally compiled libs?

I have a lib I installed by hand (to /usr/local) on a Linux system (Eigen3, by the way). There is a FindEigen3.cmake bundled with the lib but that is not installed anywhere by default.

There is /usr/share/cmake-x.y/Modules where CMake looks for additional modules, but putting these files there do开发者_如何学Cesn't seem the way to do things. Is there an equivalent place under /usr/local that is also scanned by default? Or what is the standard way of creating custom library modules?

(Although the question isn't strictly connected to programming, I think library authors may also encounter the same question from the other side: where to put these files when installing manually.)


In our project we place FIndXXX.cmake modules in folder project root dir/cmake/modules. For this to work you have to specify in project root dir/CMakeLists.txt (similiar to what DLRdave has already said):

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


See the comments in the CMake documentation for the "find_package" command:

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

It speaks of writing a "project-config" file, and where to install it, such that find_package(Eigen3) will work without having a FindEigen3.cmake find module... It is verbose, but the information is in there.

See also user contributed wiki pages such as this one:

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


You need to set the CMAKE_MODULE_PATH to include the directory that the FindEigen3.cmake file is in before calling find_package. I believe that:

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

will do the trick, but I do not have a setup to test that available at the moment so you may have to massage that technique a bit.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜