Какое место для файлов 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)