チュートリアル: MSBuild を使用した Visual C++ プロジェクトの作成
このチュートリアルでは、コマンド プロンプトで MSBuild を使用して Visual Studio C++ プロジェクトをビルドする方法を示します。 Visual C++ コンソール アプリケーション用の XML ベースの .vcxproj
プロジェクト ファイルを作成する方法を学習します。 プロジェクトのビルド後は、ビルド処理をカスタマイズする方法を学習します。
重要
Visual Studio IDE を使用し後でプロジェクト ファイルを編集する場合は、このアプローチは使用しないでください。 .vcxproj
ファイルを手動で作成すると、特にプロジェクトのプロジェクト項目でワイルドカードが使用されている場合、Visual Studio IDE でそれを編集または読み込むことができなくなるおそれがあります。 詳細については、「.vcxproj
と .props
のファイル構造」および「.vcxproj
ファイルとワイルドカード」を参照してください。
このチュートリアルでは、次の作業について説明します。
- プロジェクトの C++ ソース ファイルの作成。
- XML MSBuild プロジェクト ファイルの作成。
- MSBuild を使用したプロジェクトのビルド。
- MSBuild を使用したプロジェクトのカスタマイズ。
前提条件
このチュートリアルを完了するには、次の前提条件が必要です。
- C++ によるデスクトップ開発ワークロードがインストールされた Visual Studio のコピー。
- MSBuild システムの基本的な知識。
Note
下位レベルのビルド命令のほとんどは、プロパティ $(VCTargetsPath)
に格納されている既定のターゲット フォルダーの下に定義されている .targets
と .props
のファイルに含まれています。 ここには、Microsoft.Cpp.Common.props
などのファイルがあります。 Visual Studio 2015 以前のバージョンの場合、これらのファイルの既定のパスは %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\
の下にあります。
Note
下位レベルのビルド命令のほとんどは、プロパティ $(VCTargetsPath)
に格納されている既定のターゲット フォルダーの下に定義されている .targets
と .props
のファイルに含まれています。 ここには、Microsoft.Cpp.Common.props
などのファイルがあります。 Visual Studio 2017 の場合、これらのファイルの既定のパスは %VSINSTALLDIR%Common7\IDE\VC\VCTargets\
の下にあります。 Visual Studio 2015 以前のバージョンの場合、これらは %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\
の下に格納されていました。
Note
下位レベルのビルド命令のほとんどは、プロパティ $(VCTargetsPath)
に格納されている既定のターゲット フォルダーの下に定義されている .targets
と .props
のファイルに含まれています。 ここには、Microsoft.Cpp.Common.props
などのファイルがあります。 これらのファイルの既定のパスは %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\
の下にあります。 <version>
パス要素は、Visual Studio のバージョンに固有のものです。 Visual Studio 2019 の場合は v160
です。 Visual Studio 2017 により、これらのファイルは %VSINSTALLDIR%Common7\IDE\VC\VCTargets\
に格納されていました。 Visual Studio 2015 以前のバージョンの場合、これらは %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\
の下に格納されていました。
C++ ソース ファイルの作成
このチュートリアルでは、ソース ファイルとヘッダー ファイルがあるプロジェクトを作成します。 ソース ファイル main.cpp
には、コンソール アプリケーションの main
関数が含まれています。 ヘッダー ファイル main.h
には、<iostream>
ヘッダー ファイルをインクルードするためのコードが含まれています。 これらの C++ ファイルは、Visual Studio または Visual Studio Code などのテキスト エディターを使用して作成できます。
プロジェクトの C++ ソース ファイルを作成するには
プロジェクトのフォルダーを作成します。
main.cpp
という名前のファイルを作成し、次のコードをファイルに追加します。// main.cpp : the application source code. #include <iostream> #include "main.h" int main() { std::cout << "Hello, from MSBuild!\n"; return 0; }
main.h
という名前のファイルを作成し、次のコードをファイルに追加します。// main.h: the application header code. /* Additional source code to include. */
プロジェクト ファイルXML MSBuild プロジェクト ファイルの作成
MSBuild のプロジェクト ファイルは、プロジェクトのルート要素 (<Project>
) を含む XML ファイルです。 ビルドするサンプル プロジェクトでは、<Project>
要素に 7 個の子要素が含まれています。
- 3 個の項目グループ タグ (
<ItemGroup>
) は、プロジェクトの構成とプラットフォーム、ソース ファイル名、およびヘッダー ファイル名を指定しています。 - 3 個のインポート タグ (
<Import>
) は、Microsoft Visual C++ の設定の場所を指定しています。 - 1 個のプロパティ グループ タグ (
<PropertyGroup>
) は、プロジェクト設定を指定しています。
MSBuild プロジェクト ファイルを作成するには
テキスト エディターを使用して
myproject.vcxproj
という名前のプロジェクト ファイルを作成し、ここに表示されているルート<Project>
要素を追加します (Visual studio 2015 を使用している場合はToolsVersion="14.0"
、Visual Studio 2017 を使用している場合はToolsVersion="15.0"
、Visual Studio 2019 を使用している場合はToolsVersion="16.0"
を使用します)。<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> </Project>
この要素を、次のプロシージャ ステップのルート
<Project>
タグの間に挿入します。これらの 2 つの
<ProjectConfiguration>
子要素を<ItemGroup>
要素に追加します。 この子要素は、32 ビットの Windows オペレーティング システムのデバッグおよびリリース構成を指定します。<ItemGroup> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> </ItemGroup>
このプロジェクトの既定の C++ 設定のパスを指定する
<Import>
要素を追加します。<Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />
2 つのプロジェクト プロパティ (
<ConfigurationType>
と<PlatformToolset>
) を指定するプロパティ グループ要素 (<PropertyGroup>
) を追加します (<PlatformToolset>
値として、Visual studio 2015 を使用している場合はv140
、Visual Studio 2017 を使用している場合はv141
、Visual Studio 2019 を使用している場合はv142
を使用します)。<PropertyGroup> <ConfigurationType>Application</ConfigurationType> <PlatformToolset>v142</PlatformToolset> </PropertyGroup>
このプロジェクトの現在の C++ 設定のパスを指定する
<Import>
要素を追加します。<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ItemGroup>
要素に<ClCompile>
子要素を追加します。 この子要素は、コンパイルする C/C++ ソース ファイルの名前を指定します。<ItemGroup> <ClCompile Include="main.cpp" /> </ItemGroup>
Note
<ClCompile>
は "ビルド ターゲット" であり、既定のターゲット フォルダーで定義されています。<ItemGroup>
要素に<ClInclude>
子要素を追加します。 この子要素は、C/C++ ソース ファイルに対応するヘッダー ファイルの名前を指定します。<ItemGroup> <ClInclude Include="main.h" /> </ItemGroup>
このプロジェクトのターゲットを定義するファイルのパスを指定する
<Import>
要素を追加します。<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
完成したプロジェクト ファイル
次のコードは、前の手順で作成したプロジェクト ファイルのすべての内容です (Visual Studio 2017 の場合は ToolsVersion="15.0"
、Visual Studio 2015 の場合は ToolsVersion="14.0"
を使用します)。
<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />
<PropertyGroup>
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="main.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
</Project>
MSBuild を使用したプロジェクトのビルド
コマンド プロンプトで次のコマンドを入力して、コンソール アプリケーションをビルドします。
msbuild myproject.vcxproj /p:configuration=debug
MSBuild によって、出力ファイルのフォルダーが作成され、プロジェクトがコンパイルおよびリンクされて Myproject.exe
プログラムが生成されます。 ビルド処理が完了したら、次のコマンドを使用して、デバッグ フォルダーからアプリケーションを実行します。
myproject
アプリケーションは、コンソール ウィンドウに "Hello, from MSBuild!" と表示されます。
プロジェクトのカスタマイズ
MSBuild では、定義済みのビルド ターゲットを実行したり、ユーザー定義のプロパティを適用したりできるほか、カスタム ツール、イベント、およびビルド ステップを使用することができます。 このセクションでは、次のタスクについて説明します。
- MSBuild でのビルド ターゲットの使用。
- MSBuild でのビルド プロパティの使用。
- MSBuild での 64 ビットのコンパイラおよびツールの使用。
- MsBuild での別のツールセットの使用。
- MSBuild へのカスタマイズの追加。
MSBuild とビルド ターゲットの併用
ビルド ターゲットとは、ビルド時に実行できる定義済みまたはユーザー定義のコマンドの名前付きセットです。 ターゲット コマンドライン オプション (/t
) を使用して、ビルド ターゲットを指定します。 myproject
サンプル プロジェクトの場合は、定義済みの clean
ターゲットによってデバッグ フォルダー内のすべてのファイルが削除され、新しいログ ファイルが作成されます。
コマンド プロンプトで、次のコマンドを入力して myproject
を消去します。
msbuild myproject.vcxproj /t:clean
MSBuild とビルド プロパティの併用
プロパティ コマンド ライン オプション (/p
) によって、プロジェクト ビルド ファイルのプロパティをオーバーライドできます。 myproject
サンプル プロジェクトでは、Configuration
プロパティによってリリース用またはデバッグ用のビルド構成が指定されます。 ビルド済みアプリケーションを実行するために使用するオペレーティング システムが、Platform
プロパティで指定されます。
コマンド プロンプトで次のコマンドを入力して、32 ビット Windows で実行する myproject
アプリケーションのデバッグ ビルドを作成します。
msbuild myproject.vcxproj /p:configuration=debug /p:platform=win32
myproject
サンプル プロジェクトが、64 ビット Windows の構成と、別の myplatform
という名前のカスタム オペレーティング システムの構成も定義していると想定します。
コマンド プロンプトで次のコマンドを入力して、64 ビット Windows で実行するリリース ビルドを作成します。
msbuild myproject.vcxproj /p:configuration=release /p:platform=x64
コマンド プロンプトで次のコマンドを入力して、myplatform
のリリース ビルドを作成します。
msbuild myproject.vcxproj /p:configuration=release /p:platform=myplatform
MSBuild と 64 ビットのコンパイラおよびツールの併用
64 ビットの Windows に Visual Studio をインストールした場合、64 ビットの x64 ネイティブおよびクロス ツールが既定でインストールされます。 MSBuild を構成して PreferredToolArchitecture
プロパティを設定すると、アプリケーションのビルドに 64 ビットのコンパイラおよびツールを使用できます。 このプロパティは、プロジェクトの構成やプラットフォームのプロパティには影響しません。 既定では、32 ビット版のツールが使用されます。 64 ビット版のコンパイラおよびツールを指定するには、Microsoft.Cpp.default.props
ファイルの <Import />
要素の後に、このプロパティ グループ要素を Myproject.vcxproj
プロジェクト ファイルに追加します。
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
64 ビット ツールを使用してアプリケーションをビルドするには、コマンド プロンプトで次のコマンドを入力します。
msbuild myproject.vcxproj /p:PreferredToolArchitecture=x64
MsBuild での別のツールセットの使用
インストールされている Visual C++ の他バージョンのツールセットおよびライブラリがある場合、MSBuild では、現在の Visual C++ のバージョンまたはインストールされている別のバージョン用のアプリケーションをビルドできます。 たとえば Visual Studio 2012 がインストールされている場合に Windows XP 用の Visual C++ 11.0 ツールセットを指定するには、Microsoft.Cpp.props
ファイルの <Import />
要素の後にこのプロパティ グループ要素を Myproject.vcxproj
プロジェクト ファイルに追加します。
<PropertyGroup>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
Visual C++ 11.0 Windows XP ツールセットでプロジェクトをリビルドするには、次のコマンドを入力します。
msbuild myproject.vcxproj /p:PlatformToolset=v110_xp /t:rebuild
MSBuild へのカスタマイズの追加
MSBuild では、さまざまな方法でビルド処理をカスタマイズできます。 これらの記事では、MSBuild プロジェクトにカスタム ビルド ステップ、ツール、イベントを追加する方法を示します。
- 方法: MSBuild プロジェクトにカスタム ビルド ステップを追加する
- 方法: MSBuild プロジェクトにカスタム ビルド ツールを追加する
- 方法: MSBuild プロジェクトでビルド イベントを使用する