Paketbaurichtlinien für CMake

Dieses Dokument enthält bewährte Methoden für die Verwendung des CMake-Buildsystems in Fedora-Paketen.

Bauabhängigkeiten

Sie MÜSSEN die folgenden BuildRequires hinzufügen:

BuildRequires: cmake

Verfügbare Makros

Diese werden Sie in Ihren Spec-Dateien im Allgemeinen verwenden:

%cmake

Definiert CFLAGS, LDFLAGS usw. und ruft %__cmake mit den entsprechenden Parametern auf (z.B. -DCMAKE_INSTALL_PREFIX:PATH=/usr). Sie können -Doption=Wert an dieses Makro übergeben, um Optionen für das Buildsystem festzulegen.

%cmake_build

Baut das Projekt (mit %__cmake --build).

%cmake_install

Installiert das gebaute Projekt (mit %__cmake --install).

%ctest

Führt die mit add_test() im Projekt definierten Tests aus (unter Verwendung von %__ctest).

Beim Paketieren von KDE-Software werden Sie höchstwahrscheinlich %cmake durch %cmake_kf5 oder %cmake_kf6 ersetzen. Weitere Informationen finden Sie in den Richtlinien für KDE-Paketierung.

Es ist selten notwendig (aber zulässig), diese zu verwenden oder zu ändern:

Alle Makros, die mit einem doppelten Unterstrich beginnen, sind als privat und NICHT als stabil gedacht und werden wahrscheinlich in Zukunft entfernt.
%__cmake

Der Pfad zur ausführbaren cmake-Datei.

%__ctest

Der Pfad zur ausführbaren ctest-Datei.

%__cmake_in_source_build

Legt fest, ob Bauvorgänge außerhalb des Quellcodes (Standardeinstellung, wenn nicht definiert) oder innerhalb des Quellcodes (falls definiert) durchgeführt werden. Wann immer möglich, wird die Verwendung von Bauvorgängen außerhalb des Quellcodes empfohlen, da dies die Richtung ist, in die sich sowohl Fedora als auch CMake upstreamseitig entwickeln.

%__cmake_builddir

Enthält den Pfad zum tatsächlichen Verzeichnis, in dem der Build erstellt wurde. Bei Builds außerhalb des Quellcodes entspricht dieses Makro %_vpath_builddir. Bei Builds innerhalb des Quellcodes enthält dieses Makro den tatsächlich für den Build verwendeten Pfad.

Dieses Makro ist nur in seltenen Fällen aus Kompatibilitätsgründen sinnvoll. Bei normalen Builds außerhalb des Quellcodes entspricht es dem Makro %_vpath_builddir. Es könnte in Zukunft entfernt werden.

Anwendungsbeispiel

%build
%cmake
%cmake_build

%install
%cmake_install

%check
%ctest

Anmerkungen

-DCMAKE_SKIP_RPATH:BOOL=ON. Mit der aktuellen CMake-Version 2.4 sollte diese Option nicht mehr verwendet werden. Diese CMake-Version sollte RPATH-Probleme korrekt handhaben (RPATHs im Build-Verzeichnis setzen, während der Installation entfernen). Die Einstellung CMAKE_SKIP_RPATH für diese Version würde RPATHs auch im Build-Verzeichnis vermeiden. Dies könnte dazu führen, dass Binärdateien mit Systembibliotheken verknüpft werden (z.B. wenn eine ältere Version des Pakets installiert wurde) anstatt mit den Bibliotheken, die durch den Build erstellt wurden.

Dennoch können RPATH-Probleme auftreten, wenn CMake nicht korrekt verwendet wird. Beispielsweise werden beim Installieren eines Ziels mit INSTALL(FILES ... RENAME ...) die RPATHs nicht entfernt; in diesem Fall muss INSTALL(TARGETS ...) in Kombination mit der Änderung der Eigenschaft OUTPUT_NAME verwendet werden.

Gute Dokumentation zu CMake finden Sie an zwei Stellen: