.. _development-cpp-vcpkg: vcpkg を用いた CMake の依存ライブラリ管理 =============================================== `vcpkg `_ は C++ 用のパッケージマネージャの 1 つ。 Microsoft が作成しており、 Windows、Linux、Mac で使用できる。 特徴 -------------- - Python の PyPI や Ubuntu の apt などのパッケージマネージャが パッケージ用の専用のサーバを持つのに対し、 vcpkg はパッケージの情報を Git リポジトリで管理・提供する仕組みため、 パッケージを提供する専用のサーバが不要となっている。 - vcpkg の Git リポジトリのバージョンを固定しておけば、 ある日急にライブラリのバージョンが更新されて動作に影響が出るということはない。 - CMakeLists.txt 上ではパッケージマネージャを意識した記載をする必要がない。 (下記の使用例を参照。) インストール ---------------- vcpkg をインストールするには以下のようにする。 1. `vcpkg の GitHub リポジトリ `_ をクローンするか、 使用する先の Git リポジトリ内に submodule で追加する。 2. 以下のコマンドで vcpkg をビルドする。 - Linux .. code-block:: bash ./vcpkg/bootstrap-vcpkg.sh - Windows .. code-block:: bat .\vcpkg\bootstrap-vcpkg.bat vcpkg リポジトリのディレクトリ直下に ``vcpkg`` コマンドが配置される。 使用例 ---------------- CMake で vcpkg を使用してみた例を記載する。 vcpkg では、以下のような形式の vcpkg.json ファイルに依存ライブラリを記載する。 .. code-block:: json { "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", "dependencies": [ "boost-atomic", "bfgroup-lyra", "catch2", "trompeloeil", "fmt" ] } ``cmake`` コマンドの実行時に .. code-block:: bash cmake -DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake <他のオプションやソースディレクトリなど> のようにオプションを追加すると vcpkg.json 内のライブラリがインストールされる。 ライブラリがインストールされる際に CMakeLists.txt でどのようにライブラリを取り込むかがコンソール出力されるため、 そのコマンドを CMakeLists.txt にコピー&ペーストする。 今回の場合は以下のようになった。 .. code-block:: cmake # ライブラリを探索 find_package(lyra CONFIG REQUIRED) find_package(fmt REQUIRED) find_package(Boost REQUIRED COMPONENTS atomic) find_package(Catch2 CONFIG REQUIRED) find_package(fmt CONFIG REQUIRED) find_package(trompeloeil CONFIG REQUIRED) # ライブラリをリンク target_link_libraries( ${PROJECT_NAME} PRIVATE bfg::lyra Boost::atomic Catch2::Catch2 fmt::fmt trompeloeil::trompeloeil)