Übersicht über MSBuild (Visual C++)
MSBuild ist das Standardbuildsystem für Visual C++-Projekte. Wenn Sie ein Projekt in der integrierten Entwicklungsumgebung von Visual Studio (IDE) erstellen, werden das Tool "msbuild.exe", eine XML-basierte Projektdatei und optionale Einstellungsdateien verwendet. Obwohl Sie "msbuild.exe" und eine Projektdatei in der Befehlszeile verwenden können, stellt die IDE eine Benutzeroberfläche zur leichteren Konfiguration von Einstellungen und Erstellung von Projekten bereit. In dieser Übersicht wird beschrieben, wie Visual C++ das MSBuild-System verwendet.
Voraussetzungen
Lesen Sie die folgenden Dokumente zu MSBuild.
MSBuild
Übersicht über MSBuild-Konzepte.MSBuild-Referenz
Referenzinformationen zum MSBuild-System.Referenz zum MSBuild-Projektdateischema
Führt die MSBuild-XML-Schemaelemente, ihre Attribute sowie die übergeordneten und untergeordneten Elemente auf. Achten Sie gesondert auf die Elemente ItemGroup, PropertyGroup, Target und Task.MSBuild-Befehlszeilenreferenz
Beschreibt die Befehlszeilenargumente und die Optionen, die Sie mit "msbuild.exe" verwenden können.Referenz zu MSBuild-Aufgaben
Beschreibt MSBuild-Aufgaben. Achten Sie gesondert auf diese Aufgaben, die für Visual C++ spezifisch sind: BscMake-Aufgabe, CL-Aufgabe, CPPClean-Aufgabe, LIB-Aufgabe, Link-Aufgabe, MIDL-Aufgabe, MT-Aufgabe, RC-Aufgabe, SetEnv-Aufgabe, VCMessage-Aufgabe, XDCMake-Aufgabe, XSD-Aufgabe.
MSBuild in der Befehlszeile
Die folgende Anweisung des Dokuments MSBuild-Befehlszeilenreferenz veranschaulicht, dass das Tool "msbuild.exe" ein implizites oder explizites project file-Argument (eine VCXPROJ-Datei für Visual C++-Projekte) und 0 (null) oder mehr Befehlszeile options nimmt.
msbuild.exe [project file] [options]
Verwenden Sie die /target- (oder /t) und /property-Befehlszeilenoptionen (oder /p), um Eigenschaften und Ziele zu überschreiben, die in der Projektdatei angegeben werden.
Eine wesentliche Funktion der Projektdatei ist die Angabe eines Ziels, das eine bestimmte Operation im Projekt darstellt, und der zum Ausführen der Operation erforderlichen Ein- und Ausgaben. Eine Projektdatei kann ein oder mehrere Ziele angeben, zu denen auch ein Standardziel gehören kann.
Jedes Ziel besteht aus einer Sequenz aus einer oder mehreren Aufgaben. Jede Aufgabe wird durch eine .NET Framework-Klasse dargestellt, die einen ausführbaren Befehl enthält. Die CL-Aufgabe enthält z. B. den Befehl cl.exe.
Ein Aufgabenparameter ist eine Eigenschaft der Klassenaufgabe und stellt in der Regel eine Befehlszeilenoption des ausführbaren Befehls dar. Der FavorSizeOrSpeed-Parameter der CL-Aufgabe entspricht z. B. den Compileroptionen /Os und /Ot.
Zusätzliche Aufgabenparameter unterstützen die MSBuild-Infrastruktur. Der Sources-Aufgabenparameter gibt z. B. einen Satz von Aufgaben an, die von anderen Aufgaben genutzt werden können. Weitere Informationen zur Verwendung von MSBuild-Aufgaben finden Sie unter Referenz zu MSBuild-Aufgaben.
Die meisten Aufgaben erfordern Eingaben und Ausgaben, z. B. Dateinamen, Pfade und Zeichenfolgenparameter bzw. numerische oder boolesche Parameter. Eine allgemeine Eingabe ist z. B. der Name einer zu kompilierenden CPP-Quelldatei. Ein wichtiger Eingabeparameter ist eine Zeichenfolge, die die Buildkonfiguration und die Plattform angibt, z. B. "Debug|Win32". Eingaben und Ausgaben werden von einem oder mehreren benutzerdefinierten XML-Item-Elementen angegeben, die in einem ItemGroup-Element enthalten sind.
Eine Projektdatei kann auch benutzerdefinierte Eigenschaften und Elementdefinitionsgruppenposten angeben . Eigenschaften und Elemente bilden Name-Wert-Paare, die als Variablen im Build verwendet werden können. Die Namenskomponente eines Paars definiert ein Makro, und die Wertkomponente deklariert den Makrowert. Auf ein Eigenschaftenmakro wird mit $ (Name)-, auf ein Elementmakro mit % (Name)-Notation zugegriffen.
Andere XML-Elemente in einer Projektdatei können Makros testen und anschließend den Wert eines Makros bedingt festlegen oder die Ausführung des Builds steuern. Makronamen und Literalzeichenfolgen können verkettet werden, um Konstrukte, wie z. B. einen Pfad oder einen Dateinamen, zu generieren. In der Befehlszeile legt die /property-Option die Projekteigenschaft fest oder überschreibt sie. Auf Elemente kann in der Befehlszeile nicht verwiesen werden.
Das MSBuild-System kann vor bzw. nach einem anderen Ziel ein Ziel bedingt ausführen. Das System kann außerdem ein Ziel aufgrund dessen erstellen, ob die Dateien, die das Ziel nutzt, neuer als die vom Ziel ausgegebenen Dateien sind.
MSBuild in der IDE
Wenn Sie Projekteigenschaften in der IDE festlegen und dann das Projekt speichern, schreibt Visual C++ die Projekteinstellungen in die Projektdatei. Die Projektdatei enthält Einstellungen, die sich eindeutig auf das Projekt beziehen. Sie enthält aber nicht alle Einstellungen, die zur Erstellung des Projekts erforderlich sind. Die Projektdatei enthält Import-Elemente, die ein Netzwerk zusätzlicher Supportdateien beinhalten. Die Supportdateien enthalten die übrigen Eigenschaften, Ziele und Einstellungen, die erforderlich sind, um das Projekt zu erstellen.
Die meisten Ziele und Eigenschaften in den Unterstützungsdateien dienen ausschließlich der Implementierung des Buildsystems. Im folgenden Abschnitt werden einige nützliche Ziele und Eigenschaften erläutert, die Sie in der MSBuild-Befehlszeile angeben können. Durchsuchen Sie die Dateien in den Unterstützungsdateiverzeichnissen, um mehr Ziele und Eigenschaften zu ermitteln.
Supportdateiverzeichnisse
Standardmäßig befinden sich die primären Visual C++-Supportdateien in den folgenden Verzeichnissen.
Verzeichnis |
Beschreibung |
---|---|
Laufwerk:\Programme\MSBuild\Microsoft.Cpp\v4.0\ |
Enthält die primären Zieldateien (TARGETS-Format) und Eigenschaftendateien (PROPS-Format), die von den Zielen verwendet werden. Standardmäßig verweist das $ (VCTargetsPath)-Makro auf dieses Verzeichnis. |
Laufwerk:\Programme\MSBuild\Microsoft.Cpp\v4.0 \Platforms\Plattform\ |
Enthält plattformspezifische Ziel- und Eigenschaftsdateien, die die Ziele und Eigenschaften im übergeordneten Verzeichnis außer Kraft setzen. Dieses Verzeichnis enthält auch eine DLL-Datei, die die von den Zielen in diesem Verzeichnis verwendeten Aufgaben definiert. Der Plattformplatzhalter stellt die Unterverzeichnisse Itanium, Win32 oder x64 dar. |
Laufwerk:\Programme\MSBuild\Microsoft.Cpp\v4.0\Platforms\Plattform\PlatformToolsets\Toolset\ |
Enthält die Verzeichnisse, mit denen der Build Visual C++ 9.0 oder 10.0-Anwendungen generieren kann. Der Plattformplatzhalter stellt die Unterverzeichnisse Itanium, Win32 oder x64 dar. Der Toolsetplatzhalter stellt das Toolsetunterverzeichnis v90 oder v100 dar. |
Supportdateien
Die Supportdateiverzeichnisse enthalten Dateien mit den folgenden Erweiterungen.
Erweiterung |
Beschreibung |
---|---|
TARGETS |
Enthält Target-XML-Elemente, die die vom Ziel ausgeführten Aufgaben angeben. Enthält auch Property Group-, Item Group- und Item Definition Group-Elemente sowie benutzerdefinierte Item-Elemente, die zum Zuweisen von Dateien und Befehlszeilenoptionen zu Aufgabenparametern verwendet werden. Weitere Informationen finden Sie unter Target-Element (MSBuild). |
PROPS |
Enthält Property Group-XML-Elemente und benutzerdefinierte Property-XML-Elemente, die während eines Builds verwendete Datei- und Parametereinstellungen angeben. Enthält auch Item Definition Group-XML-Elemente und benutzerdefinierte Item-XML-Elemente, die zusätzliche Einstellungen angeben. In einer Elementdefinitionsgruppe definierte Elemente ähneln Eigenschaften, allerdings kann in der Befehlszeile nicht auf sie zugegriffen werden. Visual C++-Projektdateien verwenden häufig Elemente statt Eigenschaften, um Einstellungen darzustellen. Weitere Informationen finden Sie unter ItemGroup-Element (MSBuild), ItemDefinitionGroup-Element (MSBuild) und Item-Element (MSBuild). |
.xml |
Enthält XML-Elemente, die IDE-Benutzeroberflächenelemente, z. B. Eigenschaftenblätter, Eigenschaftenseiten oder Textfeld- bzw. Listenfeldsteuerelemente, deklarieren und initialisieren. Die XML-Dateien unterstützen direkt die IDE, nicht MSBuild. Die Werte von IDE-Eigenschaften werden jedoch zur Erstellung von Eigenschaften und Elementen verwendet. Die meisten XML-Dateien befinden sich in einem gebietsschemaspezifischen Unterverzeichnis. Dateien für den englisch-amerikanischen Bereich befinden sich z. B. in $(VCTargetsPath)\1033\. |
Benutzerziele und -eigenschaften
Es ist hilfreich zu wissen, welche Eigenschaften und Ziele nützlich und relevant sind, um MSBuild in der Befehlszeile am effektivsten verwenden zu können. Die meisten Eigenschaften und Ziele dienen der Implementierung des Visual C++-Buildsystems und sind daher für den Benutzer nicht relevant. In diesem Abschnitt werden einige lohnende benutzerorientierte Eigenschaften und Ziele beschrieben.
PlatformToolset-Eigenschaft
Die PlatformToolset-Eigenschaft bestimmt, ob das Visual C++ 2010- oder das Visual C++ 2008-Toolset im Build verwendet wird. Der Wert der Eigenschaft wird mit Literalzeichenfolgen verkettet, um den Pfad eines Verzeichnisses zu bilden, das die für die Erstellung eines Projekts für eine bestimmte Plattform erforderlichen Eigenschafts- und Zieldateien enthält.
Legen Sie die PlatformToolset-Eigenschaft auf v100 fest, um zur Erstellung der Anwendung Visual C++ 2010-Tools zu verwenden.
msbuild myProject.vcxproj /p:PlatformToolset=v100
Legen Sie die PlatformToolset-Eigenschaft auf v90 fest, um zur Erstellung der Anwendung Visual C++ 2008-Tools zu verwenden. Das Visual C++ 2008-Toolset muss bereits auf dem Computer installiert sein, damit diese Eigenschaft wirksam ist.
msbuild myProject.vcxproj /p:PlatformToolset=v90
UseEnv-Eigenschaft
Standardmäßig setzen die plattformspezifischen Einstellungen für das aktuelle Projekt die PATH-, INCLUDE-, LIB-, LIBPATH-, CONFIGURATION- und PLATFORM-Umgebungsvariablen außer Kraft. Legen Sie die UseEnv-Eigenschaft auf true fest, um zu gewährleisten, dass die Umgebungsvariablen nicht überschrieben werden.
msbuild myProject.vcxproj /p:UseEnv=true
Ziele
In den Visual C++-Supportdateien sind Hunderte von Zielen enthalten. Die meisten sind jedoch systemorientierte Ziele, die der Benutzer ignorieren kann. Den meisten Systemzielen wird ein Unterstrich (_) vorangestellt oder sie verfügen über einen Namen, der mit "PrepareFor", "Compute", "Before", "After", "Pre" oder "Post" beginnt.
In der folgenden Tabelle sind mehrere lohnende benutzerorientierte Ziele aufgeführt.
Target |
Beschreibung |
---|---|
BscMake |
Führt das Microsoft-Wartungshilfsprogramm zum Durchsuchen von Informationen aus ("bscmake.exe"). |
Build |
Erstellt das Projekt. Dies ist das Standardziel für ein Projekt. |
ClCompile |
Führt das Visual C++-Compilertool ("cl.exe") aus. |
Bereinigen |
Löscht temporäre und zwischengespeicherte Builddateien. |
Lib |
Führt das 32-Bit-Tool von Microsoft zur Bibliotheksverwaltung ("lib.exe") aus. |
Link |
Führt das Visual C++-Linkertool ("link.exe") aus. |
ManifestResourceCompile |
Extrahiert eine Liste der Ressourcen aus einem Manifest und führt das Microsoft Windows-Ressourcencompilertool ("rc.exe") aus. |
Midl |
Führt das MIDL (Microsoft Interface Definition Language)-Compilertool ("midl.exe") aus. |
Neu erstellen |
Bereinigt und erstellt das Projekt. |
ResourceCompile |
Führt das Microsoft Windows-Ressourcencompilertool ("rc.exe") aus. |
XdcMake |
Führt das XML-Dokumentationstool ("xdcmake.exe") aus. |
Xsd |
Führt das XML-Schemadefinitionstool ("Xsd.exe") aus. |
Siehe auch
Weitere Ressourcen
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
März 2011 |
Änderung in Plattform in der Tabelle "Supportdateiverzeichnisse", um "x64" anstelle von "x86s" einzubeziehen. |
Kundenfeedback. |