LoginSignup
120
83

More than 5 years have passed since last update.

find_packageの動作

Last updated at Posted at 2014-12-06

CMake のマニュアルからの抄訳です。

デバッグのお供に

下記のコマンドで、find_packageが<package>-config.cmake を検索したパスを表示できる。
buildディレクトリを削除して、設定値のキャッシュを消す必要があるかもしれない。

cmake .. -DCMAKE_FIND_DEBUG_MODE=1

.. の部分は、ソースツリーの場所にあわせて変更すること。

find_package の検索ロジック

find_package には Module モードと Config モードの2種類のモードがある。
通常は、まず Module モードで検索してから、 Config モードにフォールバックする。

Module モード

Find<package>.cmake を検索する。

  1. CMakeのインストール先 (e.g. /usr/local/share/cmake-2.8/Modules)
  2. 環境変数 CMAKE_MODULE_PATH に設定したパス

Config モード

後述の規定のディレクトリから、<package>Config.cmake または <lower-case-package>-config.cmake を検索する。

<package>_DIR 変数で検索対象のパスを指定できる。

検索対象のディレクトリ
  • <prefix> については後述。
  • <name> は、<package> または NAMES オプションで指定した名前
Windows
  • <prefix>/
  • <prefix>/(cmake|CMake)
  • <prefix>/<name>*/
  • <prefix>/<name>*/(cmake|CMake)
Linux
  • <prefix>/(lib/<arch>|lib|share)/cmake/<name*>/
  • <prefix>/(lib/<arch>|lib|share)/<name*>/
  • <prefix>/(lib/<arch>|lib|share)/<name*>/cmake/
<prefix> に使用されるパス

以下のパスが <prefix> として使用される。

  1. cmakeのキャッシュ (cmake のコマンドライン引数に -DVAR=value 形式で指定する)。 コマンドに NO_CMAKE_PATH オプションを指定するとスキップされる。

    • CMAKE_PREFIX_PATH
    • CMAKE_FRAMEWORK_PATH
    • CMAKE_APPBUNDLE_PATH
  2. cmake 環境変数。コマンドに NO_CMAKE_ENVIRONTMENT_PATH オプションを指定するとスキップされる。

    • <package>_DIR
    • CMAKE_PREFIX_PATH
    • CMAKE_FRAMEWORK_PATH
    • CMAKE_APPBUNDLE_PATH
  3. HINTS オプションで指定したパス

  4. システムの環境変数。NO_SYSTEM_ENVIRONMENT_PATH を指定するとスキップされる。
    環境変数 PATH のエントリが、/bin/sbin で終わる場合はその親ディレクトリに変換される。

  5. cmake-gui で設定したプロジェクトビルドツリー (Windows only)

  6. User Package Registry に格納されたパス。NO_CMAKE_PACKAGE_REGISTRY を指定するとスキップされる。

  7. cmakeのシステムパス

  • CMAKE_SYSTEM_PREFIX_PATH
  • CMAKE_SYSTEM_FRAMEWORK_PATH
  • CMAKE_SYSTEM_APPBUNDLE_PATH
  1. System Package Registry に格納されたパス
    NO_CMAKE_SYSTEM_PACKAGE_REGISTRY を指定するとスキップされる。

  2. PATHS オプションで指定したパスのリスト。

120
83
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
120
83