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