Entwicklung & Code

CMake 4.3 bringt Common Package Specification und Build-Profiling


Kitware hat Version 4.3 seines weit verbreiteten Build-Systems CMake veröffentlicht. Die wichtigste Neuerung ist die Unterstützung der Common Package Specification (CPS) – ein JSON-basiertes Format, das Softwarepakete herstellerneutral beschreibt. Daneben führt das Release ein Instrumentation-Framework ein, mit dem Entwickler Timing-Daten und Systemdiagnosen während des gesamten Build-Prozesses erfassen können.

Weiterlesen nach der Anzeige

Das Build-System CMake gilt als De-facto-Standard für C- und C++-Projekte und wird sowohl in zahlreichen Open-Source- als auch in kommerziellen Projekten eingesetzt. Bisher konnten Paketbeschreibungen nur in der CMake-eigenen Sprache ausgetauscht werden. Die CPS-Spezifikation liegt aktuell in Version 0.14.1 vor und soll die Interoperabilität zwischen verschiedenen Build-Systemen verbessern, indem Paketbeschreibungen in einem Format ausgetauscht werden können, das laut Ankündigung von Kitware nicht an die CMake-eigene Sprache gebunden ist.

Die Common Package Specification beschreibt Binärpakete – also Bibliotheken, Header und Tools – in einem maschinenlesbaren JSON-Format, das unabhängig vom jeweiligen Build-System funktioniert. CPS-Dateien enthalten Informationen zu Interface-Targets, unterstützten Konfigurationen pro Architektur, Versionskompatibilität und Lizenzangaben. Damit können Build-Systeme wie CMake, aber auch Paketmanager wie Conan, dieselben Paketbeschreibungen nutzen, ohne sie in ein proprietäres Format übersetzen zu müssen.

Konkret hat Kitware in CMake 4.3 drei zentrale Integrationspunkte geschaffen: Der Befehl find_package() durchsucht nun auch CPS-Pakete und kann diese importieren. Die Befehle install() und export() erhielten ein neues Subcommand PACKAGE_INFO, mit dem sich CPS-Beschreibungen erzeugen lassen. Zudem versteht der project()-Befehl jetzt die Optionen COMPAT_VERSION und SPDX_LICENSE, die bei der CPS-Erzeugung automatisch übernommen werden. Experimentelle CPS-Unterstützung gab es bereits in früheren 4.x-Versionen – mit CMake 4.3 gilt das Feature laut den Release Notes nun als stabil.

Wer wissen will, wo die Build-Zeit tatsächlich verrinnt, bekommt mit cmake-instrumentation(7) ein neues Werkzeug an die Hand. Das Framework sammelt während aller Phasen – Konfiguration, Generierung, Kompilierung, Test und Installation – granulare Daten zu Laufzeiten, Exit-Codes und Systemmetriken wie CPU-Auslastung und Speicherverbrauch. Die Messwerte landen in indexierten Snippet-Dateien im Build-Verzeichnis und lassen sich über Callbacks weiterverarbeiten.

Weiterlesen nach der Anzeige

Besonders praktisch für die Analyse: CMake 4.3 kann die Instrumentierungsdaten im Google Trace Event Format ausgeben. Damit lassen sich Build-Abläufe in gängigen Trace-Viewern wie Perfetto visualisieren – Engpässe in der Kompilierung oder bei der Link-Phase werden so auf einen Blick sichtbar. Zusätzlich fließen die Daten in CDash-Submissions ein, sodass Teams ihre Build-Performance auch im CI/CD-Betrieb überwachen können. Die Aktivierung erfolgt wahlweise über den neuen Befehl cmake_instrumentation() oder über JSON-basierte Query-Dateien auf Projekt- oder Nutzerebene.

Neben den beiden Highlights bringt CMake 4.3 zahlreiche weitere Verbesserungen mit. Die Archiv-Operationen über cmake -E tar und file(ARCHIVE_CREATE) unterstützen nun Multithreading über ein neues --cmake-tar-threads-Flag, zusätzliche Kompressionsmethoden wie LZMA und PPMd für das 7zip-Format sowie konfigurierbare Kompressionslevel. Das neue Kommandozeilenwerkzeug cmake -E bin2c wandelt Binärdateien in C-Header um.

Für GPU-Entwickler relevant: HIP-Code lässt sich jetzt für SPIR-V-Ziele kompilieren, etwa über das chipStar-Projekt. Auf der Kommandozeile gibt cmake --version =json-v1 detaillierte Versionsinformationen im JSON-Format aus, und cmake --build erlaubt es nun, Build-Verzeichnis und Preset gemeinsam anzugeben. Neue Generator-Expressions $ erweitern die Möglichkeiten für String-Operationen in Build-Skripten. Die Preset-Dateien unterstützen Schema-Version 11, und die File-Based API wurde auf Codemodel-Version 2.10 aktualisiert.

Neue Variablen CMAKE__LINK_FLAGS und CMAKE__LINK_FLAGS_ ermöglichen sprachspezifische Linker-Flags für alle Target-Typen. Einen vollständigen Überblick sämtlicher Änderungen in CMake 4.3 liefern die Release Notes. Die neue Version steht auf der offiziellen Download-Seite als Binärpaket für Windows, macOS und Linux zum Download bereit.


(map)



Source link

Beliebt

Die mobile Version verlassen