まずはVisualStudio 2022をインストールします。
winget install --id Microsoft.VisualStudio.2022.Community --force --override "--add Microsoft.VisualStudio.Workload.NativeCrossPlat --includeRecommended"
これはCommunity版の場合です。Professional版やEnterprise版を使いたい人は、適当に修正してください。
なお「C++を使用したLinux及び埋め込み開発」のワークロードが必要になります。最初のコマンドラインに含まれています。上のVisualStudio Installerのイメージは、GUIから手動で設定したい人のための参考です。
次にWSLを設定します。
wsl --install
wsl
sudo apt update
sudo apt install g++ gdb make ninja-build rsync zip
新しいプロジェクトを作成します。ターゲットをLinuxにして、コンソールアプリケーションを作成してください。
プロジェクトができました。しかしこれは、まだWSLでは動きません。
プロジェクトのプロパティから、プラットフォームツールセットをWSL2 GCC Toolsetにします。
.vcxprojファイルを直接編集して、プラットフォームツールセットをWSL2 GCC Toolsetにすることもできます。
<PropertyGroup>
<PlatformToolset>WSL2_1_0</PlatformToolset>
</PropertyGroup>
これで、Windowsアプリと同じようにデバッグできるようになりました。プログラムは実行時にWSL環境へデプロイされますので、実行前にコピーする手間はかかりません。
流行りのVisualStudio Codeではなく、VisualStudio 20xxで開発したいという人の多くは、ターゲット環境がウェブやメインフレームではなくて、組み込みLinuxである人が多いのではないかと思われます。
WSLでビルドしたバイナリを実機に持っていくと、以下のようなエラーが出て実行できないことがあります。
./application: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by ./application)
ターゲットマシンでビルドするか、ターゲットマシンのlibをアップグレードするのが、これの一般的な解決策になります。
しかしながら組み込み機器の開発においては、ターゲットマシン上でビルドしたりapt upgradeしたりすることが困難な場合があります。
そこでターゲットマシンのOSに合わせてWSLにインストールするディストリビューションをダウングレードします。具体的には、wsl --install -d Ubuntu-20.04
のようにして、ディストリビューションとバージョンを明示的に指定してインストールします。
デフォルトのディストリビューション以外のWSLでデバッグするには、プロジェクトのプロパティから「WSLのディストリビューション名」を明示的に指定します。