C++ ビルドのカスタマイズ
Directory.Build.props と Directory.Build.targets を使用して、共通の親フォルダーにあるすべての C++ プロジェクトをカスタマイズできます。 「フォルダー別にカスタマイズする」を参照してください。 さらに、C++ プロジェクトには、次の拡張機能ポイントが用意されています。 以下のプロパティを使用して、Microsoft.Cpp.* ファイルの前後に自動的にインポートされる .props
または .targets
ファイルを指定できます。
- ForceImportAfterCppDefaultProps
- ForceImportBeforeCppProps
- ForceImportAfterCppProps
- ForceImportBeforeCppTargets
- ForceImportAfterCppTargets
これらのインポートは、その他のプロパティに依存するプロパティまたはその他のターゲットに依存するターゲットの定義のシーケンスを制御します。 .vcxproj
内のインポートのシーケンスは、以下のとおりです。
vcxproj
Microsoft.Cpp.default.props
Microsoft.Common.props
Directory.Build.props
Microsoft.Cpp.props
Microsoft.Cpp.targets
Microsoft.Common.targets
Directory.Build.targets
「.vcxproj ファイルと .props ファイルの構造」を参照してください。 Microsoft.Cpp.default.props または Microsoft.Cpp.props で定義されている他のプロパティを使用するプロパティを定義する必要がある場合は、別の .props
ファイル (MyProps.props など) を作成し、Directory.Build.props
でそのファイルを指す ForceImportAfterCppProps
プロパティを定義できます。
<PropertyGroup>
<ForceImportAfterCppProps>$(MSBuildThisFileDirectory)\MyProps.props</ForceImportAfterCppProps>
</PropertyGroup>
MyProps.props は、Microsoft.Cpp.props の末尾に自動的にインポートされます。
すべての C++ ビルドをカスタマイズする
このようなカスタマイズを追跡するのは簡単ではないため、Visual studio のインストールをカスタマイズすることは推奨されていません。特定のプラットフォームの C++ ビルドをカスタマイズするために Visual Studio を拡張する場合は、各プラットフォームの .targets
ファイルを作成し、Visual studio 拡張機能の一部としてそれらのプラットフォーム用の適切なインポートフォルダーにそれらのファイルを配置します。
Win32 プラットフォーム用の .targets
ファイルである Microsoft.Cpp.Win32.targets には、次の Import
要素が含まれています。
<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportBefore\*.targets"
Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportBefore')"
/>
同じファイルの末尾付近にも、似た要素があります。
<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportAfter\*.targets"
Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportAfter')"
/>
他のターゲット プラットフォーム用の似たインポート要素は、"*%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{バージョン}\Platforms*" に存在します。
プラットフォームに応じて適切な ImportAfter
フォルダーに .targets
ファイルを配置すると、MSBuild によって、そのプラットフォーム用のすべての C++ ビルドにファイルがインポートされます。 必要に応じて、複数の .targets
ファイルをそこに置くことができます。
Visual Studio の機能拡張を使用すると、新しいプラットフォームの定義など、さらに多くのカスタマイズを行うことができます。 詳細については、C++ プロジェクトの拡張機能に関するページを参照してください。
コマンド ラインでカスタム インポートを指定する
C++ プロジェクトの特定のビルドに追加したいカスタムの .targets
のために、コマンド ラインでプロパティ ForceImportBeforeCppTargets
、ForceImportAfterCppTargets
のいずれかまたは両方を設定します。
msbuild /p:ForceImportBeforeCppTargets="C:\build\config\Custom.Before.Microsoft.Cpp.Targets" MyCppProject.vcxproj
グローバル設定の場合 (たとえば、ビルド サーバー上の 1 つのプラットフォーム用のすべての C++ ビルドに影響を与える場合)、2 つの方法があります。 まず、常に設定されるシステム環境変数を使用して、これらのプロパティを設定できます。 この手法が機能するのは、MSBuild によって常に環境が読み取られ、すべての環境変数に対するプロパティが作成 (またはオーバーライド) されるためです。