Windows で cmake を使用して find_package を実行する場合のデフォルトの検索パスは何ですか? 質問する

Windows で cmake を使用して find_package を実行する場合のデフォルトの検索パスは何ですか? 質問する

私はいくつかのコードをWindowsに移植しており、cmakeはLibavahiパッケージをチェックしています。

find_package(Libavahi)

ヘッダー、dll などはありますが、cmake が見つけられるようにこれらをどこに配置すればよいかわかりません。

これらのファイルを cmake が見つけられるようにどこに置けばいいでしょうか? これらのファイルは というフォルダー内にありますusr

モジュール パスは次のように指定されていることがわかります。

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

しかし、検索されるデフォルトの場所があるかどうか疑問に思います

ベストアンサー1

CMake マニュアルは、さまざまなfind_*コマンドのかなり複雑な検索順序を完全に指定します。残念ながら、Windows には のようなデフォルトのディレクトリ構造がないため/usr/local/lib、ここで適切なデフォルトを設定するのは困難です。

ディレクトリを管理する最も信頼できる方法の 1 つは、環境変数のヒントを使用することです。 find コマンドのセクション$ENV{MY_VAR}に を追加しHINTS、その環境変数をプロジェクトの readme に記述するだけです。 C++ プログラムをコンパイルできるほとんどのユーザーは、環境変数の使用方法を知っています。また、毎回コマンド ラインでパスを指定するよりもはるかに便利です (ただし、パスを追加オプションとして残しておいても問題ありません)。

CMakeはfind_packageWindows上で特別なメカニズムを提供します。パッケージレジストリCMakeはWindowsレジストリの以下のパッケージ情報のリストを保持しますHKEY_CURRENT_USER\Software\Kitware\CMake\Packages\。ソースからビルドされたパッケージは、exportコマンドを実行します。その後、同じマシンでビルドされる他のプロジェクトは、追加の構成なしでそのパッケージを見つけることができます。これは、同じマシンでソースから相互に依存する多数のプロジェクトをビルドする必要がある場合に非常に強力です。

更新: バージョン3.12以降、CMakeは暗黙的に<PackageName>_Root環境変数をHINTすべての通話に対してfind_package

おすすめ記事