C++ ビルドのカスタマイズ

Directory.Build.propsDirectory.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 のために、コマンド ラインでプロパティ ForceImportBeforeCppTargetsForceImportAfterCppTargets のいずれかまたは両方を設定します。

msbuild /p:ForceImportBeforeCppTargets="C:\build\config\Custom.Before.Microsoft.Cpp.Targets" MyCppProject.vcxproj

グローバル設定の場合 (たとえば、ビルド サーバー上の 1 つのプラットフォーム用のすべての C++ ビルドに影響を与える場合)、2 つの方法があります。 まず、常に設定されるシステム環境変数を使用して、これらのプロパティを設定できます。 この手法が機能するのは、MSBuild によって常に環境が読み取られ、すべての環境変数に対するプロパティが作成 (またはオーバーライド) されるためです。