Anpassen von C++-Builds

Sie können Directory.Build.props und Directory.Build.targets verwenden, um alle C++-Projekte unter einem gemeinsamen übergeordneten Ordner anzupassen. Siehe „Nach Ordner anpassen“. Darüber hinaus stellen C++-Projekte die folgenden Erweiterbarkeitspunkte bereit. Sie können die Eigenschaften verwenden, um .props- oder .targets-Datei(en) anzugeben, die vor oder nach Microsoft.Cpp.*-Dateien automatisch importiert werden soll(en):

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

Diese Importe ermöglichen die Kontrolle über die Abfolge der Definitionen von Eigenschaften, die von anderen Eigenschaften abhängen, oder von Zielen, die von anderen Zielen abhängig sind. Die Reihenfolge der Importe in einem .vcxproj sieht wie folgt aus:

   vcxproj
      Microsoft.Cpp.default.props
         Microsoft.Common.props
            Directory.Build.props
      Microsoft.Cpp.props
      Microsoft.Cpp.targets
         Microsoft.Common.targets
            Directory.Build.targets

Siehe .vcxproj und .props-Dateistruktur. Wenn Sie Eigenschaften definieren müssen, die andere in Microsoft.Cpp.default.props oder Microsoft.Cpp.props definierte Eigenschaften verwenden, können Sie eine andere .props-Datei erstellen (z. B. MyProps.props) und die ForceImportAfterCppProps-Eigenschaft in Directory.Build.props definieren, auf die hingewiesen wird:

<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).