CMake: Boost ライブラリ探しを簡単にする - CMAKE_SYSTEM_PREFIX_PATH と CMAKE_PREFIX_PATH の使い分け
この変数の役割
- プロジェクト自体では変更しないようになっています。代わりに、
CMAKE_PREFIX_PATH
変数を使用してください。 - 環境変数に基づいて値が自動的に設定されます。
CMAKE_INSTALL_PREFIX
とCMAKE_STAGING_PREFIX
で指定されたパスも含まれます。- システム標準のライブラリとツールへのパスを保持します。
CMAKE_SYSTEM_PREFIX_PATH
の使い方
この変数は、CMake の find_package
コマンドで使用されます。このコマンドは、指定されたライブラリやツールがインストールされているかどうかを確認し、必要な場合はそれらのパスを設定します。
find_package(Boost REQUIRED)
上記の例では、Boost
ライブラリがインストールされているかどうか find_package
コマンドがチェックします。インストールされている場合、ライブラリのヘッダーファイルとライブラリファイルへのパスが自動的に設定されます。
CMAKE_SYSTEM_PREFIX_PATH
の注意点
- プロジェクト固有のライブラリやツールへのパスを設定するには、
CMAKE_PREFIX_PATH
変数を使用する必要があります。 - これは、システム標準のライブラリとツールへのパスを保持するためです。
- この変数は、プロジェクト自体で変更しないようになっています。
CMAKE_SYSTEM_PREFIX_PATH
は、プロジェクト自体で変更することはできません。CMAKE_PREFIX_PATH
は、プロジェクト内で自由に設定できます。CMAKE_SYSTEM_PREFIX_PATH
は、システム標準のライブラリとツールへのパスを保持するために使用されます。CMAKE_PREFIX_PATH
は、プロジェクト固有のライブラリやツールへのパスを設定するために使用されます。
- プロジェクト固有のライブラリやツールへのパスを設定するには、
CMAKE_PREFIX_PATH
変数を使用する必要があります。 - この変数は、プロジェクト自体で変更しないようになっています。
- この変数は、
find_package
コマンドで使用されます。 CMAKE_SYSTEM_PREFIX_PATH
は、CMakeがインストール済みライブラリやツールを探すパスを指定するための変数です。
cmake_minimum_required(VERSION 3.10)
project(myproject)
find_package(Boost REQUIRED)
if(NOT Boost_FOUND)
message(FATAL_ERROR "Boost library not found")
endif()
# Boost ヘッダーファイルを使用する
add_executable(myprogram myprogram.cpp)
target_link_libraries(myprogram Boost::system)
このコードは次のようになります。
- CMake のバージョン 3.10 以降が必要であることを宣言します。
myproject
という名前のプロジェクトを作成します。Boost
ライブラリを検索します。Boost
ライブラリが見つからない場合は、エラーメッセージを表示して終了します。Boost
ヘッダーファイルを使用するプログラムmyprogram
を作成します。- プログラム
myprogram
をBoost::system
ライブラリとリンクします。
この例では、CMAKE_SYSTEM_PREFIX_PATH
変数は暗黙的に使用されます。これは、CMake がシステム標準のライブラリとツールへのパスを自動的に設定するためです。
CMAKE_PREFIX_PATH
を明示的に設定する
プロジェクト固有のライブラリやツールへのパスを設定するには、CMAKE_PREFIX_PATH
変数を明示的に設定する必要があります。
cmake_minimum_required(VERSION 3.10)
project(myproject)
# プロジェクト固有のライブラリへのパスを設定
set(CMAKE_PREFIX_PATH "/my/custom/prefix")
find_package(MyCustomLib REQUIRED)
if(NOT MyCustomLib_FOUND)
message(FATAL_ERROR "MyCustomLib library not found")
endif()
# MyCustomLib ヘッダーファイルを使用する
add_executable(myprogram myprogram.cpp)
target_link_libraries(myprogram MyCustomLib)
- CMake のバージョン 3.10 以降が必要であることを宣言します。
myproject
という名前のプロジェクトを作成します。/my/custom/prefix
ディレクトリをCMAKE_PREFIX_PATH
変数に設定します。MyCustomLib
ライブラリを検索します。MyCustomLib
ライブラリが見つからない場合は、エラーメッセージを表示して終了します。MyCustomLib
ヘッダーファイルを使用するプログラムmyprogram
を作成します。- プログラム
myprogram
をMyCustomLib
ライブラリとリンクします。
この例では、CMAKE_PREFIX_PATH
変数を使用して、/my/custom/prefix
ディレクトリ内の MyCustomLib
ライブラリを検索します。
CMAKE_SYSTEM_PREFIX_PATH
変数は、プロジェクト自体で変更しないようになっています。- プロジェクト固有のライブラリやツールへのパスを設定するには、
CMAKE_PREFIX_PATH
変数を使用する必要があります。 CMAKE_SYSTEM_PREFIX_PATH
変数は、CMake がシステム標準のライブラリとツールを探すパスを保持します。
- システム標準のライブラリとツールへのパスしか保持できない
- プロジェクト自体で変更できない
これらの制限を回避するために、CMAKE_SYSTEM_PREFIX_PATH
の代替方法をいくつか紹介します。
CMAKE_PREFIX_PATH を使用する
CMAKE_PREFIX_PATH
は、プロジェクト固有のライブラリやツールへのパスを設定するために使用できます。これは、CMAKE_SYSTEM_PREFIX_PATH
とは異なり、プロジェクト内で自由に設定できます。
cmake_minimum_required(VERSION 3.10)
project(myproject)
# プロジェクト固有のライブラリへのパスを設定
set(CMAKE_PREFIX_PATH "/my/custom/prefix")
find_package(MyCustomLib REQUIRED)
if(NOT MyCustomLib_FOUND)
message(FATAL_ERROR "MyCustomLib library not found")
endif()
# MyCustomLib ヘッダーファイルを使用する
add_executable(myprogram myprogram.cpp)
target_link_libraries(myprogram MyCustomLib)
環境変数を使用する
環境変数を使用して、ライブラリやツールのパスを設定することもできます。これは、CMAKE_PREFIX_PATH
と CMAKE_SYSTEM_PREFIX_PATH
の両方の代替方法として使用できます。
setenv(MYCUSTOMLIB_DIR "/my/custom/prefix")
上記の例では、MYCUSTOMLIB_DIR
という環境変数を設定しています。この変数は、CMake の find_package
コマンドで使用できます。
cmake_minimum_required(VERSION 3.10)
project(myproject)
find_package(MyCustomLib REQUIRED)
if(NOT MyCustomLib_FOUND)
message(FATAL_ERROR "MyCustomLib library not found")
endif()
# MyCustomLib ヘッダーファイルを使用する
add_executable(myprogram myprogram.cpp)
target_link_libraries(myprogram MyCustomLib)
手動でパスを設定する
find_package
コマンドの CMAKE_FIND_ROOT_PATH
オプションを使用して、ライブラリやツールのパスを手動で設定することもできます。
cmake_minimum_required(VERSION 3.10)
project(myproject)
find_package(MyCustomLib REQUIRED PATHS "/my/custom/prefix")
if(NOT MyCustomLib_FOUND)
message(FATAL_ERROR "MyCustomLib library not found")
endif()
# MyCustomLib ヘッダーファイルを使用する
add_executable(myprogram myprogram.cpp)
target_link_libraries(myprogram MyCustomLib)
モジュールを使用する
ライブラリやツールのパスを設定するモジュールを使用することもできます。いくつかのよく知られたモジュールには次のようなものがあります。
これらのモジュールは、特定のライブラリやツール用に設計されています。詳細については、モジュールのドキュメントを参照してください。
CMAKE_SYSTEM_PREFIX_PATH
にはいくつかの制限があります。これらの制限を回避するには、上記の代替方法を使用できます。