CMake

CMake steht für cross-platform make. Dieses Tool hat sich als der plattformunabhängige Standard zur Build-Verwaltung von C und C++ Projekten etabliert.

  • CMake ist in die meisten IDEs integriert
  • unterstützt die Compiler und Build-Tools aller gängigen Betriebssysteme
  • erlaubt einfache Verwendung anderer Bibliotheken, die auch mit CMake arbeiten
  • kann die Softwaretests managen

Installation

Viele C++ IDEs haben ein integriertes CMake. Es empfiehlt sich jedoch eine systemweite Version einzurichten um Projekte ohne die IDE zu bauen.

Auf Linux kann CMake über den Package-Manager installiert werden.

# ubuntu
$ sudo apt install cmake
# arch
$ sudo pacman -S cmake

Für die einfachere Konfiguration über das Terminal wird ccmake empfohlen

# ubuntu (auf arch bereits in cmake enthalten)
$ sudo apt install cmake-curses-gui

Auf der offiziellen Website cmake.org findet man Downloads der aktuellen Binaries für Linux, macOS und Windows, sowie den Source-Code.

Bauen von CMake-Projekten

CMake folgt dem Prinzip von out of source Builds. Das heißt, die Buildartefakte sollen nicht zusammen mit den Source-Files in den gleichen Ordnern landen.

Ein Minimalbeispiel für ein CMake-Projekt findet man hier.

Nachdem wir das Projekt geklont haben, erstellen wir einen Ordner, den wir für die Buildartefakte nutzen. Der Ordner sollte sich außerhalb des Source-Codes befinden (im Hauptordner des Projektes ist allerdings meist auch ok).

Wir wechseln in diesen Ordner hinein und führen CMake aus. CMake bekommt als Argument den Pfad, in dem sich die oberste CMakeLists.txt befindet.

git clone [...]
cd cmake-hello-world
mkdir build && cd build
cmake ..

Jetzt hat CMake unseren Compiler, unser Buildsystem und viele weitere Dinge erkannt und das Projekt so konfiguriert, dass wir es compilen können.

Jetzt führen wir einfach unser Buildsystem aus.

# GNU Make
$ make all

# Ninja build system
$ ninja
...

Alternativ können wir CMake das Buildsystem ausführen lassen.

$ cmake --build .

Eigene CMake-Projekte erstellen

Jedes CMake-Projekt besitzt mindestens eine CMakeLists.txt. Hier die Datei vom Minimalprojekt.

cmake_minimum_required(VERSION 3.5)
project(HelloWorld)
add_executable(hello main.cpp greeter.cpp)

Als erstes muss eine Mindestversion für CMake festgelegt werden. Das legt fest, welche CMake-Features verwendet werden können. Dann sollte der Projektname gesetzt werden. CMake arbeitet mit Targets, ähnlich wie GNU Make. add_executable erstellt ein Target namens hello, welches später als ausführbares Programm gebaut wird. In das Target werden die Source-Dateien main.cpp und greeter.cpp aufgenommen. CMake findet alle Abhängigkeiten selbstständig und erlaubt automatisch einen inkrementellen Buildprozess.

Anleitungen und Beispiele

Auf der CMake Website findet man viele Informationen und ein gutes Tutorial für modernes target-orientiertes CMake.

results matching ""

    No results matching ""