Как установить ваш пользовательский модуль CMake-Find

Я настраиваю и упаковываю свою библиотеку, используя CMake и CPack. Я написал свой собственный модуль FindMyLib.cmake: FindMyLib.cmake.

Как сказать CMake/CPack добавить этот файл в каталог модуля CMake, чтобы будущие разработчики могли просто указать FIND_PACKAGE(MyLib) для использования моей библиотеки?

Ответ 1

Вы можете установить CMAKE_MODULE_PATH и распространить свой собственный FindFoo.cmake с вашим проектом. Например:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")

Ответ 2

Каталог модуля CMake является частью дерева установки самого CMake, и поэтому вы не должны пытаться что-либо там добавлять.

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

Было бы лучше просто установить FindMyLib.cmake в одно из мест, которые ищет find_package:

<prefix>/                                               (Windows)
<prefix>/(cmake|CMake)/                                 (Windows)
<prefix>/<name>*/                                       (Windows)
<prefix>/<name>*/(cmake|CMake)/                         (Windows)
<prefix>/(lib/<arch>|lib|share)/cmake/<name>*/          (Unix)
<prefix>/(lib/<arch>|lib|share)/<name>*/                (Unix)
<prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/  (Unix)
<prefix>/<name>.framework/Resources/                    (Apple)
<prefix>/<name>.framework/Resources/CMake/              (Apple)
<prefix>/<name>.framework/Versions/*/Resources/         (Apple)
<prefix>/<name>.framework/Versions/*/Resources/CMake/   (Apple)
<prefix>/<name>.app/Contents/Resources/                 (Apple)
<prefix>/<name>.app/Contents/Resources/CMake/           (Apple)


Смотрите документацию для find_package для получения полной информации о том, как find_package выполняет поиск. Также в этом случае полезно руководство по упаковке CMake.

Ответ 3

Лучший способ разрешить

будущие разработчики могут просто указать FIND_PACKAGE (MyLib), чтобы использовать мою библиотеку

это написать файл конфигурации пакета (-config.cmake), а не модуль Find. Затем файл конфигурации пакета должен быть установлен в одну из папок, где ищет модуль FindPackage (что-то вроде /lib/package/или /lib/cmake/package, вторая предпочтительнее)

Модуль FindPackage автоматически загрузит файл конфигурации, если сможет найти его там.

В вики CMake есть более подробные инструкции на https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Packaging