📦
vcpkgのマニフェストモードがかなり良い
vcpkgとマニフェストモード
C++のパッケージマネージャとして、vcpkgが有名です。コマンドラインからvcpkg install xxx
とするだけでライブラリをインストールできるのでかなり楽です。ただし、この方法だとマシンにグローバルにインストールされてしまうという問題があります。
それに対して、マニフェストモードでは、vcpkg.json
というファイルを作成することで、ディレクトリごとにライブラリをインストールできるようになります。さらに、ライブラリのバージョン指定も可能のようです。使い方も簡単で便利なのでおすすめです。
CMakeと一緒に使ってみる
ここからは、vcpkg(マニフェストモード) + CMakeでプロジェクトを作成する方法を紹介します。
必要なファイルはmain.cpp
、vcpkg.json
、CMakeLists.txt
の3つです。
example_project
- main.cpp
- vcpkg.json
- CMakeLists.txt
main.cpp
では、有名なロギングライブラリであるspdlog
を使うことにします。
#include <spdlog/spdlog.h>
int main() {
spdlog::info("Hello, World!");
}
次にvcpkg.json
を作成し、spdlog
を"dependencies"
に書きます。
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json",
"name": "example",
"version-string": "1.0.0",
"dependencies": [
"spdlog"
]
}
CMakeで自動的にライブラリをインストールできるようにします。
# 基本設定
cmake_minimum_required(VERSION 3.16)
project(Example LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
# spdlogをリンクする
find_package(spdlog CONFIG REQUIRED)
add_executable(Example main.cpp)
target_link_libraries(Example PRIVATE spdlog::spdlog)
準備はこれだけです。cmakeを走らせるときは、以下のようにオプションでパスを与えます。
cmake . -B build -D CMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake
これで実際にビルドして実行してみると、しっかりspdlogが使えていることが確認できました。
基本はこれだけです。
featuresの書き方
ライブラリによっては、追加の"features"
を指定することもできます。たとえば、ImGuiで対応したいプラットフォームの機能を指定する場合、以下のように書けます。
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json",
"name": "example",
"version-string": "1.0.0",
"dependencies": [
"spdlog",
{
"name": "imgui",
"features": ["glfw-binding", "vulkan-binding", "docking-experimental"]
}
]
}
おわり
vcpkgのマニフェストモードを使えばファイル一つで環境を共有できるので、他人にもやさしくなれます。
Discussion