Какое место для файлов FindXXX.cmake для локально скомпилированных библиотек?

У меня есть lib, который я установил вручную (в/usr/local) в системе Linux (кстати, Eigen3). Существует FindEigen3.cmake в комплекте с lib, но по умолчанию он не установлен нигде.

Существует/usr/share/cmake-x.y/Modules, где CMake ищет дополнительные модули, но размещение этих файлов там не похоже на то, чтобы что-то делать. Существует ли эквивалентное место в /usr/local, которое также проверяется по умолчанию? Или что является стандартным способом создания пользовательских модулей библиотеки?

(Хотя вопрос не связан строго с программированием, я думаю, что авторы библиотеки также могут столкнуться с тем же вопросом с другой стороны: куда поместить эти файлы при установке вручную.)

Ответы

Ответ 1

См. комментарии в документации CMake для команды "find_package":

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

В нем говорится о написании файла "project-config" и где его устанавливать, так что find_package (Eigen3) будет работать без наличия FindEigen3.cmake find module... Это многословный, но информация там.

См. также страницы, внесенные пользователем, такие как:

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

Ответ 2

Вам нужно установить CMAKE_MODULE_PATH для включения каталога, в котором находится файл FindEigen3.cmake, перед вызовом find_package. Я считаю, что:

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

сделает трюк, но у меня нет настройки для проверки того, что доступно на данный момент, поэтому вам, возможно, придется немного помассировать эту технику.

Ответ 3

В нашем проекте мы размещаем модули FIndXXX.cmake в корневом каталоге dir/cmake/modules. Для этого вам нужно указать в корневом каталоге проекта /CMakeLists.txt(аналогичном тому, что уже было сказано DLRdave):

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