2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CMAKE の find_package() で参照される環境変数

Last updated at Posted at 2023-04-08

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_DIRMyLibConfig.cmake があるディレクトリ(例えば c:\dev\MyLib\lib\cmake\MyLib)を設定するのが正しい使い方のようです。ただし、CMake 3.25 においては c:\dev を設定しても動作します。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?