Was ist gn?

GN ist ein Metadaten-getriebenes Build-System, das von Google entwickelt wurde. Es wird hauptsächlich für das Chromium-Projekt und andere große Projekte verwendet. GN ist darauf ausgelegt, schnell, einfach zu erlernen und zu verwenden zu sein. Es generiert Ninja-Dateien, die dann vom Ninja-Build-Tool verarbeitet werden.

Hier sind einige wichtige Aspekte von GN:

  • Zweck: GN dient dazu, den Build-Prozess für große Softwareprojekte zu vereinfachen und zu beschleunigen. Es ist ein Generator für Build-Dateien, die von einem Build-System wie Ninja verwendet werden. Mehr Informationen über den <a href="https://de.wikiwhat.page/kavramlar/Build%20Prozess">Build Prozess</a>.

  • Sprache: Die GN-Sprache ist absichtlich einfach gehalten. Sie ist deklarativ und verwendet eine Syntax, die an Python erinnert, aber deutlich restriktiver ist. Dies trägt zur Lesbarkeit und Wartbarkeit der Build-Dateien bei.

  • Metadaten-getrieben: GN verwendet Metadaten, um zu beschreiben, wie die Software gebaut werden soll. Diese Metadaten werden in .gn-Dateien und BUILD.gn-Dateien gespeichert.

  • BUILD.gn-Dateien: Diese Dateien enthalten die Build-Regeln und Abhängigkeiten für ein bestimmtes Verzeichnis. Jedes Verzeichnis in einem GN-Projekt kann eine BUILD.gn-Datei haben.

  • *.gn-Dateien: Diese Dateien definieren globale Build-Konfigurationen und Einstellungen für das gesamte Projekt. Eine BUILDCONFIG.gn-Datei ist ein wichtiger Bestandteil.

  • ninja-Dateien: GN generiert ninja-Dateien aus den BUILD.gn-Dateien. Ninja ist ein kleines Build-System, das sehr schnell ist und parallelisiert Build-Prozesse.

  • Hauptkonzepte: Zu den Hauptkonzepten in GN gehören:

    • Targets: Ein Target definiert, wie eine bestimmte Komponente der Software gebaut werden soll (z.B. eine Bibliothek, ein ausführbares Programm). Weitere Infos zu <a href="https://de.wikiwhat.page/kavramlar/Software%20Komponente">Software Komponente</a>.
    • Sources: Die Quellcodedateien, die zum Bauen eines Targets verwendet werden.
    • Dependencies: Die anderen Targets oder externen Bibliotheken, von denen ein Target abhängt. Mehr Informationen über <a href="https://de.wikiwhat.page/kavramlar/Abhängigkeiten">Abhängigkeiten</a>.
    • Variables: Variablen werden verwendet, um Werte zu speichern und wiederzuverwenden.
  • Vorteile:

    • Geschwindigkeit: GN ist auf Geschwindigkeit ausgelegt, sowohl bei der Generierung der Build-Dateien als auch während des eigentlichen Build-Prozesses.
    • Einfachheit: Die einfache Sprache und die klare Struktur machen GN relativ einfach zu erlernen und zu verwenden.
    • Wartbarkeit: Die deklarative Natur der GN-Dateien erleichtert die Wartung und Aktualisierung der Build-Konfiguration.
    • Skalierbarkeit: GN ist für große Projekte konzipiert und kann problemlos mit einer großen Anzahl von Quellcodedateien und Abhängigkeiten umgehen.
  • Verwendung: Um GN zu verwenden, müssen Sie die BUILD.gn-Dateien erstellen, die beschreiben, wie Ihre Software gebaut werden soll. Dann führen Sie GN aus, um die ninja-Dateien zu generieren, und schließlich führen Sie Ninja aus, um die Software zu bauen.

  • gn gen Befehl: Dieser Befehl wird verwendet, um die ninja-Dateien aus den BUILD.gn-Dateien zu generieren. Siehe mehr über den <a href="https://de.wikiwhat.page/kavramlar/Befehl">Befehl</a>.

  • Integration mit anderen Tools: GN lässt sich gut in andere Tools und Build-Systeme integrieren.

  • Beispiel:

executable("my_program") {
  sources = [
    "main.cc",
    "foo.cc",
  ]

  deps = [
    "//mylib:mylib",
  ]
}

Dieses Beispiel definiert ein ausführbares Target namens my_program, das aus den Quellcodedateien main.cc und foo.cc gebaut wird und von dem Target mylib im Verzeichnis mylib abhängt. Informationen über <a href="https://de.wikiwhat.page/kavramlar/Quellcodedateien">Quellcodedateien</a>.

Zusammenfassend lässt sich sagen, dass GN ein leistungsstarkes und effizientes Build-System ist, das sich gut für große Softwareprojekte eignet. Seine einfache Sprache, seine Geschwindigkeit und seine Skalierbarkeit machen es zu einer beliebten Wahl für Projekte wie Chromium.