BoostやOpenCVも楽々インストール!CMakeでライブラリ検索を便利にする「CMAKE_PREFIX_PATH」


CMakeの変数「CMAKE_PREFIX_PATH」は、CMakeがライブラリやツールを探す際に使用するディレクトリのリストを指定するために使用されます。これは、標準の検索パスとは別に、特定の場所にインストールされたライブラリやツールを見つける必要がある場合に役立ちます。

設定方法

CMAKE_PREFIX_PATH は、以下の方法で設定できます。

  • CMakeLists.txt ファイル内での設定
set(CMAKE_PREFIX_PATH "/my/custom/installation/path;/another/custom/path")
  • コマンドラインオプション
cmake -DCMAKE_PREFIX_PATH="/my/custom/installation/path;/another/custom/path" .
  • 環境変数
export CMAKE_PREFIX_PATH="/my/custom/installation/path;/another/custom/path"
cmake .

検索パス

CMAKE_PREFIX_PATH で指定されたディレクトリは、以下のコマンドで使用されます。

  • find_path(): 指定されたディレクトリ (例: インクルードディレクトリ) を検索します。
  • find_file(): 指定されたファイル (例: ヘッダーファイル) を検索します。
  • find_library(): 指定されたライブラリのライブラリファイルを検索します。
  • find_program(): 指定されたプログラムのバイナリファイルを検索します。
  • find_package(): 指定されたパッケージの構成ファイル (例: Config.cmake) を検索します。
  • キャッシュ変数 CMAKE_SYSTEM_PREFIX_PATH も存在しますが、これはシステムによってインストールされたライブラリやツールを検索するために使用されます。CMAKE_PREFIX_PATH は、ユーザーが自分でインストールしたライブラリやツールを検索するために使用されます。
  • NO_CMAKE_ENVIRONMENT_PATH オプションを find_package() コマンドに渡すことで、CMAKE_PREFIX_PATH 環境変数を無視することができます。
  • CMAKE_PREFIX_PATH は、標準の検索パスよりも優先的に検索されます。
  • 複数のパスを指定する場合は、セミコロン (;) で区切ります。

以下に、CMAKE_PREFIX_PATH を使用して Boost ライブラリを検索する例を示します。

set(CMAKE_PREFIX_PATH "/usr/local/boost")
find_package(Boost REQUIRED COMPONENTS thread)


# Boost ライブラリの検索パスを設定
set(CMAKE_PREFIX_PATH "/opt/boost;/usr/local/boost")
find_package(Boost REQUIRED COMPONENTS thread filesystem)

# OpenCV ライブラリの検索パスを設定
set(CMAKE_PREFIX_PATH "/usr/local/opencv")
find_package(OpenCV REQUIRED COMPONENTS core imgproc highgui)

# ターゲットのビルド
add_executable(myprogram main.cpp)
target_link_libraries(myprogram Boost::thread Boost::filesystem OpenCV::core OpenCV::imgproc OpenCV::highgui)

このコードでは、以下の処理が行われます。

  1. CMAKE_PREFIX_PATH/opt/boost/usr/local/boost という 2 つのパスが設定されます。
  2. find_package() コマンドを使用して Boost ライブラリと OpenCV ライブラリが検索されます。
  3. Boost::threadBoost::filesystemOpenCV::coreOpenCV::imgprocOpenCV::highgui などの必要なコンポーネントが指定されます。
  4. main.cpp ファイルをコンパイルして myprogram という実行ファイルを作成します。
  5. myprogram を Boost ライブラリと OpenCV ライブラリにリンクします。

この例は、CMAKE_PREFIX_PATH を使用して複数のライブラリを検索する方法を示す基本的な例です。実際の使用例では、必要なライブラリや検索パスに応じてコードを変更する必要があります。

以下のコードは、CMAKE_PREFIX_PATH を環境変数として設定する方法を示しています。

export CMAKE_PREFIX_PATH="/opt/boost;/usr/local/boost"
cmake .

このコマンドを実行すると、現在のシェルで CMAKE_PREFIX_PATH 環境変数が設定され、その後に実行されるすべての CMake コマンドでこの変数が使用されます。



CMAKE_PREFIX_PATH 以外にも、CMake でライブラリを検索する方法はいくつかあります。以下に、そのうちのいくつかをご紹介します。

  • find_program() と find_file() コマンド
    これらのコマンドは、個々のプログラムファイルやファイルを検索するために使用することができます。これらのコマンドは、特定の場所にインストールされたライブラリを見つける場合に役立ちます。
  • PKG_CONFIG
    このツールは、Unix システムでインストールされたライブラリを検索するために使用されます。CMake は、pkg-config を使用してライブラリ情報を読み込み、検索パスを更新することができます。
  • CMAKE_MODULE_PATH
    この変数は、CMake モジュールの検索パスを指定するために使用されます。モジュールは、CMake の機能を拡張するために使用できるスクリプトファイルです。
  • CMAKE_FIND_ROOT_PATH
    この変数は、CMake がライブラリを検索する際のルートディレクトリを指定するために使用されます。
  • MODULE_PATH
    この変数は、CMake モジュールの検索パスを指定するために使用されます。モジュールは、CMake の機能を拡張するために使用できるスクリプトファイルです。
方法説明利点欠点
CMAKE_PREFIX_PATHライブラリの検索パスを直接指定します。シンプルで使いやすい特定の場所にのみインストールされたライブラリを見つける場合にのみ役立ちます。
MODULE_PATHCMake モジュールの検索パスを指定します。CMake の機能を拡張するためにモジュールを使用する場合に役立ちます。あまり一般的ではありません。
CMAKE_FIND_ROOT_PATHCMake がライブラリを検索する際のルートディレクトリを指定します。検索パスを階層的に整理する場合に役立ちます。あまり一般的ではありません。
CMAKE_MODULE_PATHCMake モジュールの検索パスを指定します。CMake の機能を拡張するためにモジュールを使用する場合に役立ちます。あまり一般的ではありません。
PKG_CONFIGUnix システムでインストールされたライブラリを検索します。多くの Unix システムで標準的に使用されており、設定が簡単です。Windows では使用できません。
find_program()find_file() コマンド個々のプログラムファイルやファイルを検索します。特定の場所にインストールされたライブラリを見つける場合に役立ちます。煩雑で、エラーが発生しやすい可能性があります。