web-dev-qa-db-ja.com

カスタムCMake-Findモジュールをインストールする方法

CMakeとCPackを使用してライブラリを構成およびパッケージ化します。私は独自の検索モジュールを作成しました:_FindMyLib.cmake_。

将来の開発者がライブラリを使用するためにFIND_PACKAGE(MyLib)を指定できるように、CMake/CPackにこのファイルをCMakeモジュールディレクトリに追加するように指示するにはどうすればよいですか?

50
goocreations

CMAKE_MODULE_PATHを設定し、カスタムFindFoo.cmakeをプロジェクトとともに配布できます。例えば:

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

CMakeモジュールディレクトリはCMake自体のインストールツリーの一部であるため、そこに何かを追加しようとしてはなりません。

CMakeモジュールディレクトリには、Kitwareによって作成または少なくともレビューされたモジュールが含まれており、そこに独自のモジュールを追加すると、プロジェクトのユーザーに、これもプロジェクトに当てはまるという印象を与えます。

FindMyLib.cmakeをfind_packageで検索された場所の1つにインストールする方が良いでしょう。

<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パッケージングチュートリアル もこの場合に役立ちます。

46
Fraser

許可する最良の方法

将来の開発者は、FIND_PACKAGE(MyLib)を指定してライブラリを使用できます

findモジュールではなく、パッケージ構成ファイル(-config.cmake)を記述することです。パッケージ構成ファイルは、FindPackageモジュールが検索するフォルダーの1つにインストールする必要があります(/ lib/package /または/ lib/cmake/packageなどが優先されます)。

FindPackageモジュールは、構成ファイルを見つけることができる場合、構成ファイルを自動的にロードします。

CMake wikiの詳細な手順は https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Packaging にあります。

11
Triskeldeian