MSBuild-Grundierung für WDK-Entwickler
In diesem Abschnitt werden einige grundlegende MSBuild-Terminologie für WDK-Entwickler vorgestellt, die mit Build.exe und NMake.exe vertraut sind. In diesem Abschnitt wird die Konstruktion einfacher MSBuild-Projekte veranschaulicht.
Nmake-Konzepte, die für MSBuild relevant sind
Wenn Sie mit Build.exe und früheren Versionen des WDK (vor WDK 8) gearbeitet haben, sind Sie wahrscheinlich mit der Terminologie und den Konzepten vertraut, die NMake.exe verwendet.
- -Befehl : Ruft ein Befehlszeilentool auf.
- target : Beschreibt eine benannte Befehlssequenz.
- Abhängigkeit : Beschreibt ein Ziel, das von anderen Zielen abhängig ist.
- Nmake wird für eine Make-Datei mit mindestens einem angegebenen Ziel aufgerufen. Anschließend werden alle Abhängigkeiten rekursiv und dann die Befehle des Ziels ausgeführt.
- Nmake-Dateien können andere Make-Dateien für die robuste Verwaltung der Buildstruktur enthalten.
- Nmake unterstützt auch das Erstellen benannter Variablen, die durch Parameter von Befehlen ersetzt werden.
- Nmake unterstützt auch automatische Variablen, die vom Make.exe selbst zugewiesen werden, z. B. der Name des aktuellen Verzeichnisses oder Pfads.
- Ein Ziel wird während eines einzelnen Builds nie zweimal ausgeführt. Nach der Ausführung wird davon ausgegangen, dass ein Ziel seine Arbeit abgeschlossen hat und nicht mehr ausgeführt wird, auch wenn ein nachfolgendes Ziel im Build davon abhängt.
MSBuild-Konzepte
Die Standard MSBuild-Dateierweiterung für C++-Projekte ist .vcxproj.
Befehle werden jetzt als Tasks bezeichnet und sind nicht nur Aufrufe von Befehlszeilenprozessen. Aufgaben sind stattdessen Einheiten aus ausführbarem Code, die MSBuild verwenden kann, um atomare Buildvorgänge auszuführen. Eine vollständige Liste der Aufgaben finden Sie unter MSBuild-Aufgaben, die für Visual C++ spezifisch sind.
MSBuild importiert die Tasks aus ihren CLR-Assemblys (Common Language Runtime) mit dem UsingTask-Element , wie das folgende Beispiel zeigt.
<UsingTask TaskName="TaskName" AssemblyName="AssemblyName" />
Zielt darauf ab, Aufgaben in einer bestimmten Reihenfolge zu gruppieren und den Buildprozess in kleinere Einheiten aufzuteilen.
Eine PropertyGroup ermöglicht die Definition von Eigenschaften in einem menschlichen Format. Das folgende Beispiel zeigt das PropertyGroup-Format .
<PropertyGroup> <ProductVersion>9.0.30729</ProductVersion> </PropertyGroup>
Ein Item ist eine objektorientierte Variante von Property. Während das Eigenschaftsformat Name/Wert ist, ist das Elementformat Name/Objekt, wobei das Objekt mehrere Attribute aufweist. Elemente sind Arrays von Objekten.
Auf Eigenschaften wird mit dem Format $(project) verwiesen, während auf Elemente mit dem Format @(Name) verwiesen wird.
Eine ItemGroup ist eine Auflistung von Items.
Ein ItemGroups ist in der Regel eine Liste aller Dateien, die kompiliert werden sollen. Die Auflistung der Dateien wird dann mithilfe der Notation @(itemname) an eine Aufgabe übergeben. Weitere Informationen zur Verwendung von Elementen finden Sie unter MSBuild-Elemente.
MSBuild verfügt über eine Reihe von integrierten Eigenschaften , auf die Sie auch in einer Projektdatei verweisen können.
Weitere Informationen zu MSBuild und Buildaufgaben finden Sie unter MSBuild-Konzepte und MSBuild-Referenz.