MSBuild (Visual C++) の概要
MSBuild は、Visual C++ プロジェクト用の標準のビルド システムです。Visual Studio 統合開発環境 (IDE: Integrated Development Environment) でプロジェクトをビルドするときには、msbuild.exe ツール、XML ベースのプロジェクト ファイル、およびオプションの設定ファイルが使用されます。msbuild.exe とプロジェクト ファイルをコマンド ラインで使用することもできますが、IDE にはユーザー インターフェイスが用意されているため、設定の構成とプロジェクトのビルドをより簡単に行うことができます。ここでは、Visual C++ で MSBuild システムを使用する方法について説明します。
必要条件
MSBuild に関する次のドキュメントを参照してください。
MSBuild
MSBuild の概念の概要。MSBuild リファレンス
MSBuild システムに関するリファレンス情報。MSBuild プロジェクト ファイル スキーマ リファレンス
MSBuild XML スキーマ要素の一覧を、それぞれの属性、親要素、および子要素と共に示します。特に、ItemGroup、PropertyGroup、Target、および Task の各要素に注意してください。MSBuild コマンド ライン リファレンス
msbuild.exe で使用できるコマンド ライン引数とコマンド ライン オプションについて説明します。MSBuild タスク リファレンス
MSBuild タスクについて説明します。特に、Visual C++ に固有のタスクである BscMake タスク、CL タスク、CPPClean タスク、LIB タスク、Link タスク、MIDL タスク、MT タスク、RC タスク、SetEnv タスク、VCMessage タスク、XDCMake タスク、XSD タスク に注意してください。
コマンド ラインでの MSBuild
「MSBuild コマンド ライン リファレンス」に記載されている次のステートメントは、msbuild.exe ツールが、暗黙的または明示的な引数 project file (Visual C++ プロジェクトでは .vcxproj ファイル) と、0 個以上のコマンド ラインの options を受け取ることを示しています。
msbuild.exe [project file] [options]
プロジェクト ファイルに指定されているプロパティおよびターゲットをオーバーライドするには、/target (または /t) コマンド ライン オプションおよび /property (または /p) コマンド ライン オプションを使用します。
プロジェクト ファイルの重要な機能は、プロジェクトに適用される特定の操作を表すターゲットと、その操作の実行に必要な入力および出力を指定することです。プロジェクト ファイルでは 1 つ以上のターゲットを指定でき、既定のターゲットを含めることができます。
各ターゲットは、1 つ以上のタスクのシーケンスで構成されます。各タスクは、実行可能なコマンドを 1 つ含む .NET Framework クラスによって表されます。たとえば、CL タスクには cl.exe コマンドが含まれます。
タスク パラメーターはクラス タスクのプロパティで、通常は実行可能なコマンドのコマンド ライン オプションを表します。たとえば、CL タスクの FavorSizeOrSpeed パラメーターは、/Os コンパイラ オプションおよび /Ot コンパイラ オプションに対応しています。
追加のタスク パラメーターは、MSBuild インフラストラクチャをサポートします。たとえば、Sources タスク パラメーターは、他のタスクで使用できる一連のタスクを指定します。MSBuild タスクの詳細については、「MSBuild タスク リファレンス」を参照してください。
ほとんどのタスクには入力と出力が必要です。これには、ファイル名、パス、文字列パラメーター、数値パラメーター、ブール値パラメーターなどがあります。たとえば、一般的な入力は、コンパイルする .cpp ソース ファイルの名前です。重要な入力パラメーターとして、ビルド構成とプラットフォームを指定する文字列があります。たとえば、"Debug|Win32" のように指定します。入力と出力は、ItemGroup 要素に含まれる 1 つ以上のユーザー定義の XML Item 要素で指定します。
プロジェクト ファイルでは、ユーザー定義のプロパティおよび項目定義グループの項目を指定することもできます。プロパティと項目は、ビルドで変数として使用できる名前と値のペアを形成します。ペアの名前コンポーネントによってマクロが定義され、値コンポーネントによってマクロの値が宣言されます。プロパティ マクロには $(name) 表記を使用してアクセスし、項目マクロには %(name) 表記を使用してアクセスします。
プロジェクト ファイル内の他の XML 要素では、マクロをテストし、条件に従ってマクロの値を設定したり、ビルドの実行を制御したりできます。マクロ名とリテラル文字列を連結して、パスとファイル名などの構成要素を生成することもできます。コマンド ラインで /property オプションを使用すると、プロジェクト プロパティが設定またはオーバーライドされます。コマンド ラインで項目を参照することはできません。
MSBuild システムでは、あるターゲットを、条件に従って別のターゲットの前または後に実行できます。また、ターゲットで使用されるファイルが出力されるファイルよりも新しいかどうかに基づいて、ターゲットをビルドすることもできます。
IDE での MSBuild
IDE でプロジェクト プロパティを設定し、プロジェクトを保存すると、Visual C++ によってプロジェクト設定がプロジェクト ファイルに書き込まれます。プロジェクト ファイルにはプロジェクトに固有の設定が含まれますが、プロジェクトのビルドに必要な設定がすべて含まれているわけではありません。プロジェクト ファイルには、追加のサポート ファイルとのつながりを表す Import 要素が含まれます。サポート ファイルには、プロジェクトのビルドに必要なその他のプロパティ、ターゲット、および設定が含まれます。
サポート ファイル内のほとんどのターゲットとプロパティは、ビルド システムを実装するためだけに用意されています。次のセクションでは、MSBuild コマンド ラインで指定できる便利なターゲットとプロパティについて説明します。その他のターゲットおよびプロパティについては、サポート ファイル ディレクトリ内のファイルを参照してください。
サポート ファイル ディレクトリ
既定では、Visual C++ の主要なサポート ファイルは、次のディレクトリに配置されています。
[ディレクトリ] |
Description |
---|---|
<ドライブ>:\Program Files\MSBuild\Microsoft.Cpp\v4.0\ |
ターゲットによって使用される主要なターゲット ファイル (.targets) およびプロパティ ファイル (.props) があります。既定では、$(VCTargetsPath) マクロはこのディレクトリを参照します。 |
<ドライブ>:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\<プラットフォーム>\ |
親ディレクトリ内のターゲットおよびプロパティをオーバーライドする、プラットフォーム固有のターゲット ファイルおよびプロパティ ファイルがあります。このディレクトリ内のターゲットによって使用されるタスクを定義する .dll ファイルも含まれています。 <プラットフォーム> プレースホルダーは、Itanium、Win32、x64 のいずれかのサブディレクトリを表します。 |
<ドライブ>:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\<プラットフォーム>\PlatformToolsets\<ツールセット>\ |
ビルドで Visual C++ 9.0 アプリケーションまたは Visual C++ 10.0 アプリケーションを生成できるようにするためのディレクトリがあります。 <プラットフォーム> プレースホルダーは、Itanium、Win32、x64 のいずれかのサブディレクトリを表します。<ツールセット> プレースホルダーは、v90 または v100 のツールセット サブディレクトリを表します。 |
サポート ファイル
サポート ファイル ディレクトリには、次の拡張子を持つファイルが含まれます。
拡張子 |
Description |
---|---|
.targets |
ターゲットによって実行されるタスクを指定する Target XML 要素が含まれます。タスク パラメーターにファイルとコマンド ライン オプションを割り当てるために使用される、Property Group、Item Group、Item Definition Group、およびユーザー定義の Item の各要素が含まれることもあります。 詳細については、「Target 要素 (MSBuild)」を参照してください。 |
.props |
ビルド時に使用されるファイル設定とパラメーター設定を指定する Property Group XML 要素およびユーザー定義の Property XML 要素が含まれます。 追加の設定を指定する Item Definition Group XML 要素およびユーザー定義の Item XML 要素が含まれることもあります。項目定義グループに定義されている項目はプロパティに似ていますが、コマンド ラインからはアクセスできません。Visual C++ プロジェクト ファイルでは、プロパティではなく項目を使用して設定を表すことがよくあります。 詳細については、「ItemGroup 要素 (MSBuild)」、「ItemDefinitionGroup 要素 (MSBuild)」、および「Item 要素 (MSBuild)」を参照してください。 |
.xml |
プロパティ シート、プロパティ ページ、テキスト ボックス コントロール、リスト ボックス コントロールなどの IDE ユーザー インターフェイス要素を宣言および初期化する XML 要素が含まれます。 .xml ファイルは、MSBuild ではなく IDE を直接サポートします。ただし、IDE プロパティの値は、ビルド プロパティおよび項目に割り当てられます。 ほとんどの .xml ファイルは、ロケール固有のサブディレクトリにあります。たとえば、英語 (米国) 地域のファイルは $(VCTargetsPath)\1033\ にあります。 |
ユーザー ターゲットおよびプロパティ
コマンド ラインで MSBuild をより効果的に使用するためには、どのプロパティとターゲットが役に立ち、どれが関係しているかを知っておくと便利です。ほとんどのプロパティとターゲットは、Visual C++ ビルド システムを実装するために使用されるもので、ユーザーには関係がありません。ここでは、ユーザー指向の有用なプロパティとターゲットについて説明します。
PlatformToolset プロパティ
PlatformToolset プロパティは、ビルドで Visual C++ 2010 のツールセットを使用するか、Visual C++ 2008 のツールセットを使用するかを決定します。このプロパティの値はリテラル文字列と連結され、特定のプラットフォームでプロジェクトをビルドするために必要なプロパティ ファイルとターゲット ファイルのあるディレクトリのパスを形成します。
Visual C++ 2010 のツールを使用してアプリケーションをビルドするには、PlatformToolset プロパティを v100 に設定します。
msbuild myProject.vcxproj /p:PlatformToolset=v100
Visual C++ 2008 のツールを使用してアプリケーションをビルドするには、PlatformToolset プロパティを v90 に設定します。このプロパティを有効にするには、Visual C++ 2008 のツールセットがコンピューターに既にインストールされている必要があります。
msbuild myProject.vcxproj /p:PlatformToolset=v90
UseEnv プロパティ
既定では、現在のプロジェクトのプラットフォーム固有の設定によって、PATH、INCLUDE、LIB、LIBPATH、CONFIGURATION、および PLATFORM の各環境変数がオーバーライドされます。環境変数がオーバーライドされないようにするには、UseEnv プロパティを true に設定します。
msbuild myProject.vcxproj /p:UseEnv=true
ターゲット
Visual C++ のサポート ファイル内には、ターゲットが数多く存在します。ただし、ほとんどはシステム指向のターゲットであり、ユーザーは無視できます。ほとんどのシステム ターゲットは、先頭にアンダースコア (_) が付くか、"PrepareFor"、"Compute"、"Before"、"After"、"Pre"、または "Post" で始まる名前が付いています。
ユーザー指向の有用なターゲットを次の表に示します。
Target |
Description |
---|---|
BscMake |
Microsoft Browse Information Maintenance Utility ツール (bscmake.exe) を実行します。 |
Build |
プロジェクトをビルドします。 プロジェクトの既定のターゲットです。 |
ClCompile |
Visual C++ コンパイラ ツール (cl.exe) を実行します。 |
Clean |
一時ビルド ファイルおよび中間ビルド ファイルを削除します。 |
Lib |
Microsoft 32-Bit Library Manager ツール (lib.exe) を実行します。 |
Link |
Visual C++ リンカー ツール (link.exe) を実行します。 |
ManifestResourceCompile |
マニフェストからリソースの一覧を抽出し、Microsoft Windows リソース コンパイラ ツール (rc.exe) を実行します。 |
Midl |
Microsoft インターフェイス定義言語 (MIDL: Microsoft Interface Definition Language) コンパイラ ツール (midl.exe) を実行します。 |
Rebuild |
プロジェクトを消去してからビルドします。 |
ResourceCompile |
Microsoft Windows リソース コンパイラ ツール (rc.exe) を実行します。 |
XdcMake |
XML ドキュメント ツール (xdcmake.exe) を実行します。 |
Xsd |
XML スキーマ定義ツール (Xsd.exe) を実行します。 |