CMake のドキュメントからの抜粋です。
参照される環境変数
CMake の find_package(MyLib)
で参照される環境変数には、検索順の早い順に
MyLib_ROOT
MyLib_DIR
CMAKE_PREFIX_PATH
PATH
があります。
MyLib_ROOT
は古くから広く使われているパッケージ用のものです。新しく作るライブラリにはふさわしくありません。
MyLib_DIR
はライブラリ毎の管理になります。登録するライブラリの数が増えてくると邪魔に感じるかもしれません。
CMAKE_PREFIX_PATH
には同名の CMAKE キャッシュ変数も定義されていて、キャシュ変数の方が先に検索されます。
PATH
内で \bin で終わるディレクトリはその一つ上が対象になります。例えばc:\dev\bin
にパスを通すことで c:\dev
が指定されます。
PATH
と同様に CMAKE_PREFIX_PATH
では、セミコロンで区切ることで複数のディレクトリを指定できます。
find_package() で NO_CMAKE_ENVIRONMENT_PATH
を指定すると CMAKE_PREFIX_PATH
の値は無視されます。 NO_SYSTEM_ENVIRONMENT_PATH
を指定すると PATH
が無視されます。
検索されるディレクトリ
find_package(MyLib)
によって、環境変数で指定されたディレクトリとその下にある特定のサブディレクトリから MyLibConfig.cmake
および mylib-config.cmake
が検索されます。
Windows 環境では、指定されたディレクトリからの相対指定で
- cmake
- MyLib*
- MyLib*/cmake
- MyLib*/lib/cmake/MyLib*
- MyLib*/share/cmake/MyLib*
- MyLib*/lib/MyLib*
- MyLib*/share/MyLib*
- MyLib*/lib/MyLib*/cmake
- MyLib*/share/MyLib*/cmake
に対しても検索が行われます。(検索対象は他にもあります。)MyLib* は MyLib もしくは MyLib で始まる任意の文字列です。MyLib-1.0.0 のようにライブラリ名にバージョン名を続ければ、バージョン違いを同じディレクトリの下に並べてインストールできます。
なお、Windows のファイルシステムでは大文字と小文字は区別されません。検索名と比較して大文字と小文字が違っていてもヒットします。
追記
によると
Paths to packages may also be specified by setting variables matching _DIR, such as SomePackage_DIR. Note that this is not a prefix, but should be a full path to a directory containing a config-style package file, such as /opt/somepackage/lib/cmake/SomePackage in the above example.
ということで、MyLib_DIR
は MyLibConfig.cmake
があるディレクトリ(例えば c:\dev\MyLib\lib\cmake\MyLib
)を設定するのが正しい使い方のようです。ただし、CMake 3.25 においては c:\dev
を設定しても動作します。