MicrosoftのC/C++コンパイラを実行してみよう
上記の方法で作業を行えば、cl.exeというコマンドが利用できるようになっている。これがMicrosoftのC/C++コンパイラだ。
このコマンドは「Developer Command Prompt for VS 2022」というターミナルプリケーションから実行する。スタートメニューで「developer」と入力すれば補完候補として「Developer Command Prompt for VS 2022」が表示されると思うので、選択して起動すればよい。引数に何も指定せずに「cl.exe」と入力してコマンドが実行されたら、インストールとセットアップは完了していることになる。
これまではターミナルアプリケーションとしてWindows Terminalを取り上げてきた。MicrosoftはそろそろWindows 11のデフォルトターミナルアプリケーションをWindows Terminalに切り替える姿勢を見せているし、当然、Microsoft C/C++コンパイラもWindows Terminalで使いたいと思うのは当然だ。
しかしながら、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年以降の動向に注目しておきたいところだ。