CMAKE v4.0 Update

Frisch aus der Build-Fabrik wird weiter CMake Version 4.0 ins Netz verteilt.

Nun stellt sich die Frage:

Wird mein Code weiter damit gebaut werden können?


Antwort:

aber nicht immer.

Ich habe nicht so ganz verstanden, warum nach 3.31 Version 4.0 folgte. Denn ich sehe keine wirklich “großen” Features. Es fühlt sich - wie schon oft gesagt - eher an wie ein Sprung von 3.31 auf 3.40.

Eine wichtige Änderung gibt es aber: Die Mindest-Version in CMake Scripts muss jetzt größer gleich 3.10 sein.

Ich hatte schon beim Wechsel von 3.26 auf 3.27 feststellen müssen, dass ein CMake-Minimum-Requirement jetzt 3.5 ist und ältere Angaben einfach nicht mehr gebaut werden können.
Mit der Erhöhung auf 3.10 ist nun auch ein Update meine GATE Quellcodes notwendig, um dynamisch auf den Versionszwang reagieren zu können.

Problem: Alte Plattformen

Ich brauch in Wahrheit nur selten Features, die über v3.1 liegen. Für Builds auf Windows 2000 ist v3.4 die jüngste Version, die auf diesem System noch ausführbar ist.
Folglich hatte ich ursprünglich:

1cmake_minimum_required(VERSION 3.4)

in meiner CMakeLists.txt.

Nach der Veröffentlichung von 3.27, hatte ich das auf 3.5 erhöht, um zumindest auf “allen” Folgesystemen baubar zu sein.
Die alten Debian Varianten wie Debian-9 kamen schließlich mit CMake v3.7 heraus, womit mein Build direkt auf solchen Plattformen lauffähig ist.

Mit der erneuten Erhöhung beschloss ich das ganze “flexibel” zu gestalten:

1if(CMAKE_VERSION VERSION_GREATER "3.14.99")
2  cmake_minimum_required(VERSION 3.15)
3elseif(CMAKE_VERSION VERSION_GREATER "3.4.99")
4  cmake_minimum_required(VERSION 3.5)
5else()
6  cmake_minimum_required(VERSION 3.1)
7endif()

Tja, CMake-Macher … ihr dachtet wohl, ihr erkönnt mich zum Upgrade zwingen.
Falsch gedacht! Denn ich weiß mit IF umzugehen.

Fazit

Ja, CMake Erweiterungen sind gut … aber dieser v4 Sprung kommt mir doch etwas seltsam vor.

Dass die älteren Minimum-Requirements mal erhöht werden, war mir klar. Dass das aber so schnell passieren würde, überraschte mich doch etwas.

Wie auch immer … die flexible Lösung passt sich jetzt an die installierte CMake Version an und somit kann ich weiter die alte mit der neuen Welt “verbinden”.