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
を検索する。
- CMakeのインストール先 (e.g.
/usr/local/share/cmake-2.8/Modules
) - 環境変数
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>
として使用される。
- cmakeのキャッシュ (cmake のコマンドライン引数に
-DVAR=value
形式で指定する)。 コマンドにNO_CMAKE_PATH
オプションを指定するとスキップされる。
CMAKE_PREFIX_PATH
CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH
- cmake 環境変数。コマンドに
NO_CMAKE_ENVIRONTMENT_PATH
オプションを指定するとスキップされる。
<package>_DIR
CMAKE_PREFIX_PATH
CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH
-
HINTS
オプションで指定したパス -
システムの環境変数。
NO_SYSTEM_ENVIRONMENT_PATH
を指定するとスキップされる。
環境変数PATH
のエントリが、/bin
か/sbin
で終わる場合はその親ディレクトリに変換される。 -
cmake-gui で設定したプロジェクトビルドツリー (Windows only)
-
User Package Registry に格納されたパス。
NO_CMAKE_PACKAGE_REGISTRY
を指定するとスキップされる。 -
cmakeのシステムパス
CMAKE_SYSTEM_PREFIX_PATH
CMAKE_SYSTEM_FRAMEWORK_PATH
CMAKE_SYSTEM_APPBUNDLE_PATH
-
System Package Registry に格納されたパス
NO_CMAKE_SYSTEM_PACKAGE_REGISTRY
を指定するとスキップされる。 -
PATHS
オプションで指定したパスのリスト。