ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

Microsoft Visual C++ Build Tools を個別に入れてみる

Visual Studio 2015のMicrosoft Visual C++ Build Toolsを個別に入れてみて実際のビルドには何が必要なのかを確認しました.

実行環境

項目 バージョン
OS Windows11 22H2
Visual Studio 2015

インストーラーの取得

まずはVisual Studioの以前のバージョンを取得できるページに行き、2015のプルダウンを開きます.

visualstudio.microsoft.com

以前のバージョンのVisual Studioのダウンロードページ

ダウンロードとかかれたボタンをクリックするとバージョンごとのインストーラーのダウンロードページに移動します. 今回はビルドツールを個別に入れてみたいのでVisual C++ Build Tools for Visual Studio 2015 with Update3のDVDを選択してDownloadボタンを押します.

Visual C++ Build Tools for Visual Studio 2015 with Update3のDVDをダウンロード

最低限のインストール

先ほど入手したisoファイルをエクスプローラーから開くとDVDドライブとして認識されるので、その中のVisualCppBuildTools_Full.exeを実行するとインストーラーが起動します. 今回はカスタムインストール->何もチェックせずにインストールします.

DVDドライブからインストーラーを実行

カスタムインストールを選択

何もチェックを入れずにインストール

何もチェックしなくてもインストールすることで主に次のものがインストールされます. この時点ではVisual Studio 2015入れていませんが、Build Toolsを入れるだけでフォルダが作成されるようです(というよりはコンパイラ等はVisual Studioのフォルダに置かれる模様).

  1. Microsoft Visual C++コンパイラおよびビルドツール (cl.exe、link.exe、dumpbin.exeなど)
  2. Microsoft Visual C++ビルドツール
  3. MS Build ツール
  4. ucrtフォルダ(ヘッダファイル用フォルダ)
  5. ucrtフォルダ(ライブラリファイル用フォルダ)

それぞれのインストール場所及び役割は次のようになります.

項目名 インストール場所 役割
MSVCコンパイラ及びビルドツール C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin コンパイラとバイナリツール. 実際にはアーキテクチャごとのツール群がもう一つ下の階層に存在する.
MSVCビルドツール C:\Program Files (x86)\Microsoft Visual C++ Build Tools アーキテクチャごとにパスを指定するbatファイルが複数存在する.
MSビルドツール C:\Program Files (x86)\MSBuild\14.0\Bin MSBuild.exeなど. Visual Studioでビルドするときに利用.
ucrtフォルダ(ヘッダーファイル) C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt stdio.hなどの標準ライブラリ用のヘッダファイルが含まれる.
ucrtフォルダ(ライブラリファイル) C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt アーキテクチャごとのフォルダに分かれてる.

この状態でビルドをしてみるとどうなるでしょうか. ビルドを行うためにはMSVCビルドツールでアーキテクチャごとのプロンプトを開く必要があります. Homeボタン->すべてのアプリ -> Visual C++ Build Tools -> Native Build Tools Command Prompt を選択し、そのコンソール上で適当なcファイルをビルドしてみます.

ターゲットごとのプロンプトを開く

この時点でビルドしてもkernel32.libがリンクできないといわれる

ということで、この時点ではビルドに必要なファイルがまだそろっていないようです. ちなみに、コンパイルだけであれば成功しました.

コンパイルだけであれば可能

また、Visual C++ Build Toolsのプロンプトではなく通常のコマンドプロンプトからコンパイルしようとすると、ヘッダーへのパスが通っていないらしくコンパイル時にエラーが出ました.

Visual C++ Build Toolsを通さないとコンパイルさえ通らない

最後の悪あがきにcl.exe(link.exe)のnodefaultlibオプションを何個か試してみましたが、さすがにmainCRTStartupは必須だったので諦めました.

/link /nodefaultlib オプション時

WinSDKのインストール

最低限のインストールではビルドができないことが判明したので、再びインストーラーを起動しWinSDKをインストールしましょう.

「変更」から足りないコンポーネントをインストールできる

主なものとして次のものがインストールされます.

  1. WinSDKヘッダファイル
  2. WinSDKライブラリファイル

主なインストール場所及び役割は次の通りです.

項目名 インストール場所 役割
WinSDKヘッダファイル C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0 ヘッダファイルが存在. shared、ucrt、um、winrtフォルダに分かれている.
WinSDKライブラリファイル C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um kernel32.libなどのファイルが置かれている.アーキテクチャごとのフォルダに分かれている. 各アーキテクチャごとにucrt、umフォルダが存在する.

umフォルダが作成されていればkernel32.libもインストールされているはずです. WinSDKをインストールした状態であればビルドが通りました.

kernel32.libも入りビルドに成功した

注意

WinSDKのバージョンとVisual Studioのバージョンは一対一対応ではありません. しかし、Visual Studioをインストールすると規定のWinSDKもインストールされるためVisual Studioをインストールする≒WinSDKをインストールするという認識でいいのではないでしょうか.

参考

learn.microsoft.com

learn.microsoft.com