Am 20. März veröffentlichte Kitware CMake 3.17.
Im Folgenden sind einige Änderungen aufgeführt, die das Leben eines Qt-Entwicklers verbessern sollten, der CMake verwendet.
Ninja Multi-Config-Generator
Dieser Generator ähnelt dem Ninja-Generator, kann jedoch verwendet werden, um mehrere Konfigurationen gleichzeitig zu erstellen.
Diese Funktion ähnelt der debug_and_release-Funktion in qmake.
Die Referenzdokumentation für den Ninja Multi-Config-Generator enthält alle kleinen Details.
Die Verwendung von debug_and_release würde wie folgt aussehen:
cmake -G"Ninja Multi-Config" \ -DCMAKE_CONFIGURATION_TYPES=Release;Debug \ -DCMAKE_DEFAULT_CONFIGS=all \ -DCMAKE_CROSS_CONFIGS=all \ -S source_dir \ -B build_dir cmake --build build_dir
iOS Multi-Architektur für Ninja/Makefile-Generatoren
Jetzt können Sie sofort „fette“ Binärdateien (mit mehreren Architekturen) für iOS kompilieren.
Die Verwendung der Befehlszeile würde wie folgt aussehen:
cmake -GNinja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_SYSTEM_NAME=iOS \ -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64 -S source_dir \ -B build_dir cmake --build build_dir
AUTOGEN verwendet Abhängigkeitsdateien von generierten MOC-Dateien
Qt 5.15 bringt uns ein aktualisiertes Moc, das eine Abhängigkeitsdatei generieren kann, die wiederum von Ninja verwendet wird, um nur die notwendigen Bits (neu) zu erstellen.
Das bedeutet, dass für ein Projekt wie Qt Creator ein Null-Build schneller ist, da nicht mehr alle AUTOGEN-Targets erstellt werden müssen.
Mit Windows 10 testeten Entwickler CMake 3.17, Ninja 1.10, Qt 5.15.0 mit Qt Creator und null Builds (durchschnittlich 5 Durchläufe) von 4,6 Sekunden mit CMake 3.16 auf 2,4 Sekunden mit CMake 3.17!
Qt Creator hat noch einige benutzerdefinierte Ziele zu erreichen (Kopieren freigegebener Dateien, einschließlich Dateien usw.) und diese 2,4 Sekunden zu füllen.
Ninja startet CMake nach der Konfiguration nicht neu
Sie haben vielleicht bemerkt, dass Ninja nach dem Öffnen eines CMake-Projekts in Qt Creator und dem Klicken auf die Schaltfläche „Erstellen“ CMake für ein bereits konfiguriertes Projekt neu startet.
Je nach Größe des Projekts oder der Plattform kann das sehr lästig sein. Die CMake-Konfiguration von Qt Creator kann auf einem Windows 10-Entwicklungscomputer bis zu 30 Sekunden dauern.
Mit Ninja Version 1.10 und CMake Version 3.17 ist dieses lästige Verhalten verschwunden!
Das Qt SDK enthält Ninja und CMake, leider Version 1.9 von Ninja und Version 3.16 von CMake.
Header zwischenspeichern und vorkompilieren
Für Projekte, die eine Header-Datei verwenden, um die Kompilierung über vorkompilierte Header zu beschleunigen, und ccache zum Zwischenspeichern von Build-Artefakten verwenden, hat ccache jetzt eine Cache-Trefferrate von 100 %!
CMake kopiert den Header-Zeitstempel für seinen internen vorkompilierten Header-Mechanismus und ccache denkt nicht, dass das PCH-Artefakt zu neu ist.
Qt Creator verwendet den Header src/shared/qtcreator_gui_pch.h.
Für Cache muss include_file_mtime angegeben werden.
Im Moment funktioniert das nur mit GCC. CMake Clang Precompile Header-Konfiguration wird von Ccache nicht unterstützt.
Gesunde Zip- und 7zip-Archive generieren
CMake über cmake -E Befehlszeilentar kann tar.gz, tar.bz, tar.xz, tar.zstd, zip, 7z Archive extrahieren oder Archive erstellen.
Dies kann auf CI-Systemen nützlich sein, auf denen nicht auf allen Plattformen die erforderlichen Tools installiert sind, aber CMake installiert ist.
Zip- und 7zip-Archive enthalten das aktuelle Verzeichnis. im Archiv. Während dies für tar-Archive keine Probleme verursacht, kann ein Zip-Archiv unter Windows nicht mit dem Windows Explorer geöffnet werden, und ein 7zip-Archiv kann unter KDE Probleme (Abstürze) verursachen.