Visual Studio Code で CMake Tools の MSBuild 出力が文字化けする対策

CMakePresets.json の configurePresets で環境変数 DOTNET_CLI_UI_LANGUAGE と VSLANG を指定すると msbuild.exe の出力を英語に設定できる。両方とも指定しないとなぜか変わらない(💢)。

設定例:

{
    "version": 8,
    "configurePresets": [
        {
            "name": "x64",
            "generator": "Visual Studio 17 2022",
            "toolset": "host=x64",
            "architecture": "x64",
            "binaryDir": "${sourceDir}/build/${presetName}",
            "cacheVariables": {
                "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install/${presetName}",
                "CMAKE_C_COMPILER": "cl.exe",
                "CMAKE_CXX_COMPILER": "cl.exe"
            },
            "environment": {
                "DOTNET_CLI_UI_LANGUAGE": "en-US",
                "VSLANG": "1033"
            }
        }
    ],
    "buildPresets": [
        {
            "name": "x64-debug",
            "configurePreset": "x64",
            "configuration": "Debug"
        }
    ]
}

ほんとうは日本語で文字化けせずに出せればそれがいいのだがわからなかった。エクステンションのロード時にどこかでコードページが指定されているようなのだが……。

Vcpkg

Vcpkg は、Visual C++ でオープンソースのライブラリをパッケージとして簡単に管理できるツールとして Microsoft がさいきん公開したツール。GitHub で公開されている。

有名どころのライブラリはほとんどがすでにポートとして網羅されていて、boost、curl、gettext、gtk などを vcpkg コマンドを使って VC++ で使うためにビルドできる。個人的に気になるのは freetype, icu, opencv, openssl, python3, wxwidgets あたりかな。これまで NuGet にもあった WTL はこっちにもある。

オープンソースのライブラリはメインターゲットがほとんど Linux なので Windows で使おうとすると README 読んで自分でがんばるしかないという状況だったので、MS 謹製でこういうものを用意してくれるとありがたい。Visual Studio でこれらを扱う標準的なやりかたが出たのも大きい。

たとえば、ひみつメモ帳は OpenSSL と(現在公開しているバージョンでは)wxWidgets を使っているのだけど、それぞれ自力でビルドしてプロジェクトの設定にマニュアルでパスを追加している。これが、コマンドラインで vcpkg install openssl wxwidgets とだけ叩けば、プロジェクトのソースで #include <openssl/crypto.h> といきなり書けるようになる。ビルドの設定じゃなくてコードに集中できてよい。

気になるのは、OSS のライブラリに交じって、ATL とか MFC とかのポートが含まれているところ。あんまり使う機会はなさそうだけど、やるとどうなるのだろう。

Visual Studio 向けのインストーラープロジェクト

これまた以前に書いた、Visual Studio で MSI 形式のインストーラを作れなくなったという話の続き。

その後、Visual Studio の拡張機能として Microsoft から「Microsoft Visual Studio 2017 Installer Projects」がリリースされた。Visual Studio のツールメニューからインストールできる。リンク先は VS 2017 用だけど、2015 用もある。

まだちゃんと試してないけど、とりあえず障壁は除かれた。