Latanius
Latanius

Reputation: 2653

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 doesn'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.)

Upvotes: 22

Views: 22265

Answers (3)

beduin
beduin

Reputation: 8253

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)  

Upvotes: 7

DLRdave
DLRdave

Reputation: 14250

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

Upvotes: 5

ltc
ltc

Reputation: 3361

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.

Upvotes: 5

Related Questions