CMake 4.0 (ist zuuu neu)
«« | 30 Mar 2025 | »»Mit dem Erscheinen von CMake Version 4 geht das defacto Standard C/C++ Build-System in eine neue Runde.
Es fühlt sich aber eher wie ein CMake 3.40 an, das auf die letzte
3er-Version 3.31 folgt.
Ich kenne CMake nun seit fast 10 Jahren und nutze es privat wie beruflich
in den letzten 6 Jahren täglich.
Eigentlich stellt sich für mich immer wieder die Frage, warum ich es nicht
schon seit 16 Jahren durchgehend nutze … naja … eine andere Geschichte.
Version 4.0 bringt für mich keine wichtigen Neuerungen mit, leider beschert uns allen der Umstieg eher Probleme, weil Dinge fehlen.
Ab v4.0 wird der Minimum-Standard auf v3.10 gehoben. Das ist formal kein großes Thema, weil alles weiter funktioniert, was bis v3.9 da war, wenn man von ein paar Sonderfällen und Spezial-Policies und -Defaults absieht.
Doch wer in seinem Script ein
1cmake_minimum_required(VERSION 3.9)
oder generell < 3.10 drinnen hat, bekommt jetzt einen Fehler mit Abbruch,
wo in den letzten Versionen nur eine Deprecation-Warning stand.
Viele kleinere Projekte wie z.B.: zlib nutzen
nur Basis-Funktionen in CMake, die alle schon in v3.0 oder 3.1 enthalten
waren. Folglich ist deren Minimum-Requirement auch für diese alten
Versionen gesetzt.
Mit CMake 4.0 lässt sich dieser Code dann nicht mehr verwalten.
Das trifft mich vor allem bei Conan
Projekten, denn dort sind alle fertigen Pakete und Rezepte fixiert und werden
nicht fortlaufend geändert.
Um sie kompilieren zu können ist also in Zukunft ein älteres CMake zwingend
erforderlich.
Version 3.26 ist das jüngste “alte CMake-3”, welches von v3.0 bis 3.26 alle Varianten ohne Deprecation-Warning behandeln kann.
GATE Anpassungen
Ich werde mir jetzt wohl etwas einfallen lassen müssen, damit GATE unter CMake 4 genau so bauen kann wie unter CMake 3. Mein altes Test-Ubuntu 16.04 kommt noch mit CMake 3.7 um die Ecke und ich nutze kaum Funktionen über 3.5.
Vermutlich lässt sich cmake_minimum_required variabel gestalten, je nachdem,
was wirklich installiert wird. Dummerweise gibt es ohne diese required Zeile
auch Warnungen und Fehler, dass das Minimum nicht festgelegt ist.
Fazit
CMake ist grundsätzlich genial … obwohl es uns eine scheußliche
Scriptsprache aufzwingt. Da würde mir xmake mit
LUA schon besser gefallen … doch wenn es
um den Support älterer wie neuerer Compiler und alle Arten von exotischen
Plattformen geht, kommt man an diesem Universalwerkzeug einfach nicht vorbei.
Vorläufig musste ich CMake 4.0 wieder deinstallieren und durch 3.31 ersetzen.
Gespannt bin ich, wie Conan Projekte auf die Änderung reagieren werden.
Conan selbst setzt ja 3.15 voraus, aber wie gesagt: Die CMakeLists.txt
Dateien vieler Projekte nutzen oft Werte kleiner 3.10.
Ich rieche Patches, die auf uns zukommen.
