vcpkgとCMakeを用いてライブラリを管理する方法について述べる。
私は普段VSCodeとGCCのコンパイラを用いてプログラミングを行っている。その環境でvcpkgを用いてライブラリ管理を行う際の方法について記す。
丸投げ
大体は上の記事の通りだ。ただ、上の記事はマニュフェストモードでの動作であり、ハマったポイントもあったので、忘れないうちにメモしておきたい。
ハマったポイント:CMakePresetsにおけるTripletの指定漏れ
マニュフェストモード、クラシックモード双方に言えることだが、自分の環境に対応した適切なTripletが指定されていないと、以下のようなエラーが出る。
undefined reference to \`__imp__ZN3fmt3v116vprintENS0_17basic_string_viewIcEENS0_17basic_format_argsINS0_7contextEEE'
これを解決するのには、以下の内容が役に立った。
この記事の内容を踏まえて、実行する環境に合わせてCMakePresets.json
を以下のように変更した。
{
"version": 2,
"configurePresets": [
{
"name": "vcpkg",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"VCPKG_TARGET_TRIPLET": "x64-mingw-dynamic"
}
}
]
}
ハマったポイント:マニュフェストモードとクラシックモードの差異
クラシックモードでは、あらかじめvcpkgを用いてライブラリをインストールしておく必要がある。また、パッケージのインストールの際にも正しいTripletを指定する必要がある。自分の環境の場合は、コマンドラインに以下のように入力すればよかった。
vcpkg install fmt:x64-mingw-dynamic
正しいTripletを指定することでこの問題を解決できるようだ。