MicrosoftのC/C++コンパイラを実行してみよう

上記の方法で作業を行えば、cl.exeというコマンドが利用できるようになっている。これがMicrosoftのC/C++コンパイラだ。

このコマンドは「Developer Command Prompt for VS 2022」というターミナルプリケーションから実行する。スタートメニューで「developer」と入力すれば補完候補として「Developer Command Prompt for VS 2022」が表示されると思うので、選択して起動すればよい。引数に何も指定せずに「cl.exe」と入力してコマンドが実行されたら、インストールとセットアップは完了していることになる。

  • Developer Command Prompt for VS 2022でcl.exeを実行した例

    Developer Command Prompt for VS 2022でcl.exeを実行した例

これまではターミナルアプリケーションとしてWindows Terminalを取り上げてきた。MicrosoftはそろそろWindows 11のデフォルトターミナルアプリケーションをWindows Terminalに切り替える姿勢を見せているし、当然、Microsoft C/C++コンパイラもWindows Terminalで使いたいと思うのは当然だ。

しかしながら、Windows Terminalでcl.exeを実行しようとしても次のように実行できない。

  • Windows Terminalではcl.exeは実行できない(何も設定していないため)

    Windows Terminalではcl.exeは実行できない(何も設定していないため)

ここでは、cl.exeは「C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\bin\Hostx86\x86\cl.exe」として存在しており、フルパスで指定すれば動作を確認することができる。しかし、cl.exeとしては実行できない。これは上記のパスが環境変数Pathに含まれていないためだ。

Developer Command Prompt for VS 2022はお膳立てが便利

「Developer Command Prompt for VS 2022」はWindows Consoleを使って実装されたターミナルアプリケーションのように見える。コマンドプロンプトやWindows PowerShellと同じ系統だ。

MicrosoftはWindows Terminalの使用を推奨しており、コンソール系もWindows Terminalの開発に伴って整理された仕組みを使う方向へ推奨の舵を切っている。したがって、なぜこのタイミングでWindows Terminalではなく、「Developer Command Prompt for VS 2022」というわざわざWindows Consoleを使って実装されたであろうレガシーなターミナルアプリケーションを使う必要があるのか、ということになる。

それは「Developer Command Prompt for VS 2022」を起動すると、ビルドツールが必要とする環境変数が自動的に設定されるから、という点に尽きると思う。Windows TerminalでPowerShell 7.2を起動したときに設定されている環境変数と、「Developer Command Prompt for VS 2022」を起動したあとで設定されている環境変数の違いをざっとまとめると次のようになる。

環境変数 内容
追加 DevEnvDir C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\
追加 ExtensionSdkDir C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs
追加 Framework40Version v4.0
追加 FrameworkDir C:\Windows\Microsoft.NET\Framework\
追加 FrameworkDir32 C:\Windows\Microsoft.NET\Framework\
追加 FrameworkVersion v4.0.30319
追加 FrameworkVersion32 v4.0.30319
追加 INCLUDE C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.19041.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.19041.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.19041.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.19041.0\\cppwinrt
追加 LIB C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\lib\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\ucrt\x86;C:\Program Files (x86)\Windows Kits\10\\lib\10.0.19041.0\\um\x86
追加 LIBPATH C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\lib\x86;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.19041.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.19041.0;C:\Windows\Microsoft.NET\Framework\v4.0.30319
変更 Path C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\bin\HostX86\x86;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\VC\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\\x86;C:\Program Files (x86)\Windows Kits\10\bin\\x86;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\\MSBuild\Current\Bin\amd64;C:\Windows\Microsoft.NET\Framework\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\Tools\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\PowerShell\7\;C:\Users\daichi\AppData\Local\Microsoft\WindowsApps;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja
追加 PROMPT $P$G
追加 UCRTVersion 10.0.19041.0
追加 UniversalCRTSdkDir C:\Program Files (x86)\Windows Kits\10\
追加 VCIDEInstallDir C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\VC\
追加 VCINSTALLDIR C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\
追加 VCToolsInstallDir C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\
追加 VCToolsRedistDir C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Redist\MSVC\14.30.30704\
追加 VCToolsVersion 14.30.30705
追加 VisualStudioVersion 17.0
追加 VS170COMNTOOLS C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\Tools\
追加 VSCMD_ARG_app_plat Desktop
追加 VSCMD_ARG_HOST_ARCH x86
追加 VSCMD_ARG_TGT_ARCH x86
追加 VSCMD_VER 17.0.4
追加 VSINSTALLDIR C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\
追加 WindowsLibPath C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.19041.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.19041.0
追加 WindowsSdkBinPath C:\Program Files (x86)\Windows Kits\10\bin\
追加 WindowsSdkDir C:\Program Files (x86)\Windows Kits\10\
追加 WindowsSDKLibVersion 10.0.19041.0\
追加 WindowsSdkVerBinPath C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\
追加 WindowsSDKVersion 10.0.19041.0\
追加 __DOTNET_ADD_32BIT 1
追加 __DOTNET_PREFERRED_BITNESS 32
追加 __VSCMD_PREINIT_PATH C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\PowerShell\7\;C:\Users\daichi\AppData\Local\Microsoft\WindowsApps

Windows Terminalやほかのターミナルプリケーションも、上記の環境変数を設定しておけば、「Developer Command Prompt for VS 2022」と同じように扱える。バージョンアップするとパスの設定とかを一斉に手動で更新するという手間は発生するものの、不可能ではない。ユーザーの環境変数として環境変数アイアログで設定してしまうのもありだろう。しかし、その辺りは仕組みが詳しくわかってきてからのほうがよいと思う。しばらくは「Developer Command Prompt for VS 2022」を使って作業してみよう。

それに、Windows Terminalに「Developer Command Prompt for VS 2022」と同じ環境変数を設定したPowerShell 7を起動するプロファイルが追加されてもおかしくないような気がするので、待っているといい具合になるかもしれない。

Visual Tools Build Toolsがインストールされている場合、それに対応したプロファイルを自動生成すればよいだけだから、それほど難しくない。この辺りも今後どうなっていくか、Windows Terminalがデフォルト化する2022年以降の動向に注目しておきたいところだ。