【環境】
- Windows 11 64bit
- Visual Studio 2022
- vcpkg
- ツールは全て記事投稿時点で最新
【目的】
vc143(VC++2022)用のboostをvcpkgでビルドしてインストールする。
【問題】
VS2022ツールセットしかインストールされていないにも関わらず、なぜかvc140という接尾辞が付いたライブラリしか生成されず、boost-serializationなどのライブラリが必要な時、リンカーにライブラリが読めないとか怒られる。
vcpkgのtriplet(cmakeの追加設定みたいなもの)でVCバージョンやVSのインストールディレクトリを指定しても解決できない。
【試行1】
boost-modular-build.cmakeから、
string(REGEX REPLACE "-vc14[1-9]-" "-vc140-" NEW_FILENAME ${NEW_FILENAME}) # To merge VS2022 VS2019 VS2017 and VS2015 binaries
という、vc140系でビルドしたバイナリはマージするよ、的な事が書いてある邪悪な行をコメントアウトしてみたところ、vc143の接尾辞が付いたファイルは生成されたものの、ビルド中に以下のエラーが発生。もう・・・なんなの・・・
error: building boost-thread:x64-windows failed with: BUILD_FAILED Elapsed time to handle boost-thread:x64-windows: 5.3 s Please ensure you're using the latest port files with `git pull` and `vcpkg update`. Then check for known issues at:
【試行2】
cmakeファイルではファイル名を置換しているだけっぽいので、生成した後にリネームする方針で試してみる・・・どうやらこれでいけるっぽい。
VC++が出すエラーメッセージが求めてくるファイル名に直してやれば、vcpkgからロードしてくれる様になる。
リネームしなくても読める方法があるのかもしれないが、そのような邪悪な手段は考えたくもない。
ファイル名の一括置換のためのPowerShellスクリプトはここで教えてもらった。
【問題の原因と一応の結論】
boost-modular-build.cmakeにおいて、出来上がったライブラリの接尾辞をわざわざvc140に置き換えている。
https://github.com/microsoft/vcpkg/blob/master/ports/boost-modular-build-helper/boost-modular-build.cmake
どういう積りでこうしているのか知らないが、VC++プロジェクトでビルドしたときに求められるのは、VCのバージョンに適した接尾辞が付いているライブラリファイル名なので何も良い結果になっていない。
バグと断じて良いだろう。
試行2の様にビルドした後のリネームで対応するのが無難か。