Anpassen von C++-Builds

Für C++-Projekte können die benutzerdefinierten .targets- und .props-Dateien nicht auf dieselbe Weise verwendet werden, um Standardeinstellungen außer Kraft zu setzen. In diesem Artikel wird eine andere Methode zum Anpassen des Builds beschrieben, die für C++-Builds verwendet werden kann.

Die Datei Directory.Build.props, die zum Anpassen von .NET-Projekten hilfreich ist, wird von Microsoft.Common.props importiert. Sie wird in Microsoft.Cpp.Default.props importiert, während die meisten Standardeinstellungen in Microsoft.Cpp.props definiert werden und für viele Eigenschaften eine „wenn noch nicht definiert“-Bedingung nicht verwendet werden kann, da die Eigenschaft bereits definiert ist, für bestimmte Projekteigenschaften, die in PropertyGroup mit Label="Configuration" definiert sind, aber ein anderer Standardwert erforderlich ist (siehe VCXPROJ- und PROPS-Dateistruktur).

Für C++-Projekte können Sie jedoch die folgenden Eigenschaften verwenden, um mindestens eine .props-Datei anzugeben, die vor/nach Microsoft.Cpp*-Dateien automatisch importiert werden soll:

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

Wenn Sie die Standardwerte der Eigenschaften für alle C++-Builds anpassen möchten, erstellen Sie eine weitere .props-Datei (z. B. MyProps.props), und definieren Sie die ForceImportAfterCppProps-Eigenschaft in Directory.Build.props, die darauf verweist:

<PropertyGroup>
  <ForceImportAfterCppProps>$(MsbuildThisFileDirectory)\MyProps.props</ForceImportAfterCppProps>
</PropertyGroup>

Microsoft.Cpp.props wird automatisch ganz am Ende von Microsoft.Cpp.props importiert.

Anpassen aller C++-Builds

Das Anpassen der Visual Studio-Installation wird nicht empfohlen, da es nicht einfach ist, solche Anpassungen nachzuverfolgen. Wenn Sie Visual Studio jedoch erweitern, um C++-Builds für eine bestimmte Plattform anzupassen, können Sie .targets-Dateien für jede Plattform erstellen und sie als Teil einer Visual Studio-Erweiterung in den entsprechenden Importordnern für diese Plattformen speichern.

Die .targets-Datei für die Win32-Plattform, Microsoft.Cpp.Win32.targets, enthält das folgende Import-Element:

<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportBefore\*.targets"
        Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportBefore')"
/>

Am Ende derselben Datei befindet sich ein ähnliches Element:

<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportAfter\*.targets"
        Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportAfter')"
/>

Ähnliche Importelemente liegen für andere Zielplattformen in *%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{version}\Platforms* vor.

Sobald Sie die .targets-Datei im geeigneten Ordner ImportAfter der Plattform platziert haben, importiert MSBuild Ihre Datei in jeden C++-Build für diese Plattform. Falls erforderlich, können Sie mehrere .targets-Dateien platzieren.

Mithilfe von Visual Studio-Erweiterbarkeit sind weitere Anpassungen möglich, z. B. das Definieren einer neuen Plattform. Weitere Informationen finden Sie unter C++-Projekterweiterbarkeit.

Angeben eines benutzerdefinierten Imports über die Befehlszeile

Für benutzerdefinierte .targets-Dateien, die Sie für einen bestimmten Build eines C++-Projekts einschließen möchten, legen Sie eine oder beide der Eigenschaften ForceImportBeforeCppTargets und ForceImportAfterCppTargets über die Befehlszeile fest.

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

Für eine globale Einstellung (beispielsweise für alle C++-Builds einer Plattform auf einem Buildserver) gibt es zwei Methoden. Zunächst können Sie diese Eigenschaften über eine Systemumgebungsvariable festlegen, die immer festgelegt ist. Diese Methode funktioniert, weil MSBuild immer die Umgebungseinstellungen liest und Eigenschaften für alle Umgebungsvariablen erstellt (oder außer Kraft setzt).