C++ プロジェクトの MSBuild の内部

IDE でプロジェクト プロパティを設定し、プロジェクトを保存すると、Visual Studio によってプロジェクト設定がプロジェクト ファイルに書き込まれます。 プロジェクト ファイルには、プロジェクトに固有の設定が含まれています。 ただし、プロジェクトのビルドに必要なすべての設定が含まれているわけではありません。 プロジェクト ファイルには、追加の "サポート ファイル" のネットワークを含む Import 要素が含まれています。サポート ファイルには、プロジェクトのビルドに必要な残りのプロパティ、ターゲット、設定が含まれています。

サポート ファイル内のほとんどのターゲットとプロパティは、ビルド システムを実装するためだけに用意されています。 この記事では、MSBuild コマンド ラインで指定できる便利なターゲットとプロパティについて説明します。 その他のターゲットおよびプロパティについては、サポート ファイル ディレクトリ内のファイルを参照してください。

サポート ファイル ディレクトリ

既定では、Visual Studio の主要なサポート ファイルは、次のディレクトリに配置されています。 この情報はバージョン固有です。

Visual Studio 2022 および 2019

  • %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\

    ターゲットによって使用される主要なターゲット ファイル (.targets) およびプロパティ ファイル (.props) があります。 既定では、$(VCTargetsPath) マクロではこのディレクトリを参照します。 <version> プレースホルダーは Visual Studio バージョンを指しています。Visual Studio 2022 の場合は v170、Visual Studio 2019 の場合は v160、Visual Studio 2017 の場合は v150 です。

  • %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\Platforms\<platform>\

    親ディレクトリ内のターゲットおよびプロパティをオーバーライドする、プラットフォーム固有のターゲット ファイルおよびプロパティ ファイルがあります。 このディレクトリ内のターゲットによって使用されるタスクを定義する DLL も含まれています。 <platform> プレースホルダーは、ARM、ARM64、Win32、または x64 サブディレクトリを表しています。

  • %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\Platforms\<platform>\PlatformToolsets\<toolset>\

    指定の <toolset> を使用してビルドで C++ アプリケーションを生成するためのディレクトリが含まれています。 <platform> プレースホルダーは、ARM、ARM64、Win32、または x64 サブディレクトリを表しています。 <toolset> プレースホルダーは、ツールセット サブディレクトリを表しています。

Visual Studio 2017

  • %VSINSTALLDIR%Common7\IDE\VC\VCTargets\

    ターゲットによって使用される主要なターゲット ファイル (.targets) およびプロパティ ファイル (.props) があります。 既定では、$(VCTargetsPath) マクロではこのディレクトリを参照します。

  • %VSINSTALLDIR%Common7\IDE\VC\VCTargets\Platforms\<platform>\

    親ディレクトリ内のターゲットおよびプロパティをオーバーライドする、プラットフォーム固有のターゲット ファイルおよびプロパティ ファイルがあります。 このディレクトリ内のターゲットによって使用されるタスクを定義する DLL も含まれています。 <platform> プレースホルダーは、ARM、ARM64、Win32、または x64 サブディレクトリを表しています。

  • %VSINSTALLDIR%Common7\IDE\VC\VCTargets\Platforms\<platform>\PlatformToolsets\<toolset>\

    指定の <toolset> を使用してビルドで C++ アプリケーションを生成するためのディレクトリが含まれています。 <platform> プレースホルダーは、ARM、Win32、または x64 サブディレクトリを表しています。 <toolset> プレースホルダーは、ツールセット サブディレクトリを表しています。

Visual Studio 2015 以前

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\

    ターゲットによって使用される主要なターゲット ファイル (.targets) およびプロパティ ファイル (.props) があります。 既定では、$(VCTargetsPath) マクロはこのディレクトリを参照します。

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\Platforms\<platform>\

    親ディレクトリ内のターゲットおよびプロパティをオーバーライドする、プラットフォーム固有のターゲット ファイルおよびプロパティ ファイルがあります。 このディレクトリ内のターゲットによって使用されるタスクを定義する DLL も含まれています。 <platform> プレースホルダーは、ARM、Win32、または x64 サブディレクトリを表しています。

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\Platforms\<platform>\PlatformToolsets\<toolset>\

    指定の <toolset> を使用してビルドで C++ アプリケーションを生成するためのディレクトリが含まれています。 <version> プレースホルダーは、Visual Studio 2012 の場合は V110、Visual Studio 2013 の場合は V120、Visual Studio 2015 の場合は V140 になります。 <platform> プレースホルダーは、ARM、Win32、または x64 サブディレクトリを表しています。 <toolset> プレースホルダーは、ツールセット サブディレクトリを表しています。 たとえば、Visual Studio 2015 ツールセットを使用して Windows アプリをビルドする場合は v140 です。 または、Visual Studio 2013 ツールセットを使用して Windows XP 用にビルドするには v120_xp です。

  • <drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\Platforms\<platform>\PlatformToolsets\<toolset>\

    ビルドで Visual Studio 2008 または Visual Studio 2010 のいずれかのアプリケーションを生成できるようにするパスには、<version> が含まれていません。 これらのバージョンでは、<platform> プレースホルダーは Itanium、Win32、または x64 サブディレクトリを表しています。 <toolset> プレースホルダーは、v90 または v100 ツールセット サブディレクトリを表しています。

サポート ファイル

サポート ファイル ディレクトリには、次の拡張子を持つファイルが含まれます。

拡張機能 説明
.targets ターゲットによって実行されるタスクを指定する Target XML 要素が含まれます。 タスク パラメーターにファイルとコマンド ライン オプションを割り当てるために使用される、PropertyGroupItemGroupItemDefinitionGroup、およびユーザー定義の Item の各要素が含まれることもあります。

詳細については、Target 要素 (MSBuild) に関するページを参照してください。
.props ビルド時に使用されるファイル設定とパラメーター設定を指定する Property Group XML 要素およびユーザー定義の Property XML 要素が含まれます。

追加の設定を指定する ItemDefinitionGroup XML 要素およびユーザー定義の Item XML 要素が含まれることもあります。 項目定義グループに定義されている項目はプロパティに似ていますが、コマンド ラインからはアクセスできません。 Visual Studio プロジェクト ファイルでは、プロパティではなく項目を使用して設定を表すことがよくあります。

詳細については、「ItemGroup 要素 (MSBuild)ItemDefinitionGroup 要素 (MSBuild)Item 要素 (MSBuild)」を参照してください。
.xml IDE ユーザー インターフェイス要素を宣言および初期化する XML 要素が含まれています。 たとえば、プロパティ シート、プロパティ ページ、TextBox コントロール、listbox コントロールなどです。

.xml ファイルでは、MSBuild ではなく IDE が直接サポートされます。 ただし、IDE プロパティの値は、ビルド プロパティおよび項目に割り当てられます。

ほとんどの .xml ファイルは、ロケール固有のサブディレクトリにあります。 たとえば、英語 (米国) 地域のファイルは $(VCTargetsPath)\1033\ にあります。

ユーザー ターゲットおよびプロパティ

MSBuild を効果的に使用するためには、どのプロパティとターゲットが役に立ち、どれが関係しているかを知っておくと便利です。 ほとんどのプロパティとターゲットは、Visual Studio ビルド システムを実装するために役立つもので、ユーザーには関係がありません。 ここでは、知っておくと役立つ、ユーザー指向のプロパティとターゲットについて説明します。

PlatformToolset プロパティ

PlatformToolset プロパティでは、ビルドでどの MSVC ツールセットを使用するかを決定します。 既定では、現在のツールセットが使用されます。 このプロパティを設定すると、その値がリテラル文字列と連結され、パスが形成されます。 これは、特定のプラットフォーム用にプロジェクトをビルドするために必要なプロパティとターゲット ファイルが格納されているディレクトリです。 特定のバージョンのプラットフォーム ツールセットを使用してビルドするには、そのプラットフォーム ツールセットをインストールする必要があります。

たとえば、Visual Studio 2015 のツールおよびライブラリを使用してアプリケーションをビルドするには、PlatformToolset プロパティを v140 に設定します。

msbuild myProject.vcxproj /p:PlatformToolset=v140

PreferredToolArchitecture プロパティ

PreferredToolArchitecture プロパティは、ビルドで使用されているコンパイラとツールが 32 ビットか 64 ビットかを判定します。 このプロパティは、出力プラットフォームのアーキテクチャや構成には影響しません。 このプロパティが設定されていない場合、MSBuild では、既定でバージョン x86 のコンパイラおよびツールが使用されます。

たとえば、64 ビットのコンパイラおよびツールを使用してアプリケーションをビルドするには、PreferredToolArchitecture プロパティを x64 に設定します。

msbuild myProject.vcxproj /p:PreferredToolArchitecture=x64

UseEnv プロパティ

既定では、現在のプロジェクトのプラットフォーム固有設定によって環境変数の PATHINCLUDELIBLIBPATHCONFIGURATIONPLATFORM がオーバーライドされます。 環境変数がオーバーライドされないようにするには、UseEnv プロパティを true に設定します。

msbuild myProject.vcxproj /p:UseEnv=true

目標値

Visual Studio のサポート ファイル内には、ターゲットが数多く存在します。 ただし、ほとんどはシステム指向のターゲットであり、ユーザーは無視できます。 ほとんどのシステム ターゲットは、先頭にアンダースコア (_) が付くか、PrepareForComputeBeforeAfterPre、または Post で始まる名前が付いています。

ユーザー指向の有用なターゲットを次の表に示します。

移行先 説明
BscMake Microsoft Browse Information Maintenance Utility ツール (bscmake.exe) を実行します。
Build プロジェクトをビルドします。

このターゲットがプロジェクトの既定です。
ClCompile MSVC コンパイラ ツール (cl.exe) を実行します。
Clean 一時ビルド ファイルおよび中間ビルド ファイルを削除します。
Lib Microsoft 32-Bit Library Manager ツール (lib.exe) を実行します。
Link MSVC リンカー ツール (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) を実行します。 "注記参照。"

Note

Visual Studio 2017 以降では、C++ プロジェクトでの .xsd ファイルのサポートは非推奨です。 GAC に手動で CppCodeProvider.dll を追加することによっても Microsoft.VisualC.CppCodeProvider は使用できます。

関連項目

MSBuild タスク リファレンス
BscMake タスク
CL タスク
CPPClean タスク
LIB タスク
Link タスク
MIDL タスク
MT タスク
RC タスク
SetEnv タスク
VCMessage タスク
XDCMake タスク