Definition „Cmake / Make“

Der Unterschied zwischen CMake und Make

| Autor / Redakteur: chrissikraus / Stephan Augsten

Auf der Webseite CMake.org finden sich nützliche Beispiele und Ressourcen für das Build-Management.
Auf der Webseite CMake.org finden sich nützliche Beispiele und Ressourcen für das Build-Management. (Bild: CMake.org)

Werkzeuge wie Make oder CMake sind für das Build-Management zuständig. In der Software-Erstellung übernehmen entsprechende Tools wiederkehrende, zeitraubende und fehleranfällige Aufgaben.

Make und CMake sind Build-Management-Tools, die zur Automatisierung von Software-Erstellung verwendet werden. Make übernimmt wiederkehrende, simple Aufgaben, die alternativ in Einzelschritten per Konsole ausgeführt werden müssten. Dank Automatisierung vermeidet das Werkzeug Fehler beim Build und ermöglicht somit reproduzierbare und zuverlässige Ergebnisse. CMake generiert automatisiert formale Beschreibungen des Erstellungsprozesses für unterschiedliche Plattformen.

Make: die Anfänge der Build-Management-Tools

Make entstand 1976, um den komplexen Erstellungsprozess für Software unter Unix simpler und effizienter zu gestalten. Zuvor war es üblich, den Build per Konsole manuell in Einzelschritten zu steuern.

Die schrittweise Verarbeitung war notwendig, weil die damalige Hardware stark limitiert war und somit keine größeren Operationen zuließ. Je komplexer ein Projekt war, desto unübersichtlicher wurde folglich dieser ohnehin schon monotone Prozess. Selbst bei sorgfältiger Arbeit konnten sich schnell kleine Fehler einschleichen.

Die Idee hinter Make war daher, den Build mittels formaler Beschreibung automatisch zu regeln und somit zuverlässiger und zeitsparender zu gestalten. Diese Beschreibung enthält eine Art Bauanleitung der zu erstellenden Datei und kann mit dem Kommando „make“ in der Konsole aufgerufen werden. Das Tool übernimmt den mühseligen Erstellungsprozess und baut so automatisch eine ausführbare Datei aus den Vorgaben.

Make kann zudem Abhängigkeiten auflösen und entscheidet mittels des Änderungszeitpunkts einer Datei, ob diese neu generiert werden muss. Make muss nicht zwangsläufig für Software verwendet werden. Es kann ganz allgemein aus Quelldateien neue Dateien erstellen und ist daher sehr vielseitig einsetzbar. Inzwischen hat Make viele Ableger wie CMake, NMAKE oder GNU Make inspiriert.

CMake: plattformunabhängiges Build-Management-Tool

CMake ist ein plattformübergreifendes Tool (Cross-platform Make), das Makefiles für unixoide Betriebssysteme wie Linux oder macOS sowie für Windows generiert. Außerdem unterstützt CMake verschiedene C/C++-Compiler und Linker. Darüber hinaus kann das Tool auch mit Java und Fortran umgehen.

Ein wichtiger Unterschied zum klassischen Make ist, dass CMake selbst keine ausführbaren Dateien erzeugt. Stattdessen generiert es Informationen, die von anderen Tools verwertet werden können.

Bevor es CMake gab, musste für jede Plattform und für jeden Compiler und Linker manuell ein eigenes Makefile geschrieben werden. CMake automatisiert diesen Prozess mittels plattformunabhängiger Bauanweisungen für Makefiles. Das Werkzeug kann bequem über eine grafische Oberfläche bedient werden. Alternativ können die einzelnen Funktionalitäten auch über die Konsole genutzt werden.

Makefiles: Baupläne für die Software-Erstellung

Sowohl Make als auch CMake arbeiten mit Beschreibungsdateien, den sogenannten Makefiles. Diese Dateien enthalten alle Anweisungen, die zum Bauen einer Anwendung erforderlich sind, zum Beispiel Pfade und Abhängigkeiten. Das Makefile ist sozusagen die Bauanleitung, nach der aus einzelnen Komponenten ein ausführbares Programm erstellt wird.

Ihren Ursprung haben Makefiles in der Unix-Welt. Längst wird auch unter Windows damit gearbeitet. Die Beschreibungsdateien für Make werden von Hand erstellt und beziehen sich exakt auf die Plattform, mit der man arbeiten möchte. CMake automatisiert das Erstellen von Makefiles.

CMakeLists: Der Bauplan für den Bauplan

CMake kann automatisch und mit geringem Aufwand Beschreibungsdateien für mehrere Plattformen generieren. Beim Kompilieren der Software liegt dann automatisch der jeweils passende Bauplan für das gewünschte System vor. Hierzu benötigt das Tool zunächst eine formale Beschreibung, die CMakeLists.

Darin finden sich alle relevanten Parameter und Anweisungen zum Generieren eines Makefiles, zum Beispiel der Name des Projekts oder eine Liste der benötigten Quelldateien. Diese Anweisungen sind wesentlich kompakter und übersichtlicher als das eigentliche Makefile und somit besser wartbar und leichter verständlich.

Außerdem ist es so relativ simpel, Änderungen schnell auf allen unterstützten Plattformen zu integrieren, da aus ein und derselben Datei unterschiedliche Makefiles generiert werden können. Die Makefiles selbst verändert man in der Regel nicht mehr von Hand.

Alternativen zum Makefile

Mit CMake können noch weitere Formate aus der CMakeLists generiert werden, darunter Ninja Build-Files, Projekte für KDEvelop oder XCode und Solutions für Visual Studio. Es ist also möglich, CMake flexibel mit verschiedenen IDEs zu verwenden.

Vom Makefile zur ausführbaren Datei

Aus dem fertigen Makefile kann Make selbst eine ausführbare Datei erstellen. Das Tool organisiert das Bauen und Linken der Software mit den Mitteln, die der Entwickler im Makefile festgelegt hat.

CMake hingegen generiert nur die Bauanleitungen für diverse Compiler und Entwicklungsumgebungen. Diese Anweisungen müssen den jeweiligen nativen Tools übergeben werden, damit aus den Quelldateien ein lauffähiges Programm wird. Beispiel: Mit CMake kann man Makefiles für NMAKE generieren und diese dann in Visual Studio ausführen, um ein ausführbares Programm zu erhalten.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Aktuelle Beiträge zu diesem Thema

Microsoft über neue Funktionen der Visual Studio IDE

Zweite Preview von Visual Studio 2019 16.5

Microsoft über neue Funktionen der Visual Studio IDE

Mit der zweiten Preview der „Visual Studio 2019“-Version 16.5 hat Microsoft die Integration von CMake und Xamarin in die Entwicklungsumgebung verbessert. Darüber hinaus wurde die Azure Functions Runtime auf Version 3.0 angehoben. lesen

Security und Kubernetes stehen im Fokus der VMware-Strategie

VMworld EU 2019

Security und Kubernetes stehen im Fokus der VMware-Strategie

Auf der VMworld Europe 2019 in Barcelona stellte VMware vor 14.000 Besuchern eine Fülle von Neuheiten und Projekten vor. Hervorstechend waren der Ausbau des Developer- und Security-Portfolios, aber auch bei Angeboten für Cloud Service Provider und Telco-Dienstleister. Mit SAP und Porsche stellte VMware zwei deutsche Firmen als Kunden prominent vor. lesen

Was ist ein Programmierparadigma?

Definition „Programmierparadigmen“

Was ist ein Programmierparadigma?

Programmierparadigmen sind verschiedene grundlegende Ansätze und Techniken für die Programmierung von Software. Darunter fallen z. B. auch objektorientierte oder funktionale Programmierung. lesen

Cloud Native Development – grenzenloses Potenzial

Programmieren in der und für die Cloud

Cloud Native Development – grenzenloses Potenzial

Statt die Cloud nur zu nutzen, wird im Zuge des Cloud-native Development direkt für die Nutzung programmiert. Im Endergebnis stehen leistungsstarke und skalierbare Lösungen, die Entwicklern erlauben, sich auf die eigentliche Anwendung zu konzentrieren. lesen

CMake 3.14 mit Visual Studio 2019 nutzen

Build-Tool in Microsoft-IDE integriert

CMake 3.14 mit Visual Studio 2019 nutzen

In der jüngsten Version von Visual Studio 2019 bietet Microsoft verschiedene Neuerungen. Dazu gehört auch die nahezu vollständige Unterstützung von CMake 3.14. lesen

Microsoft macht IntelliCode verfügbar

Preview 3 von Visual Studio 2019

Microsoft macht IntelliCode verfügbar

Die dritte Preview-Version von Visual Studio 2019 16.1 ist erhältlich. Die Vorschau enthält eine Reihe von Neuerungen, darunter standardmäßige IntelliCode-Unterstützung, C++-Verbesserungen zur Produktivitätssteigerung und .NET-Tooling-Updates. lesen

Visual Studio Code und Atom unter Windows

Beliebte Code-Editoren, Teil 1

Visual Studio Code und Atom unter Windows

Zum Programmieren benötigt man zwei Dinge: Die Fähigkeit zu entwickeln und die bestmöglichen Werkzeuge dafür. Bei den Code-Editoren sind die Unterschiede zwischen guten und schlechten Tools aber nicht so leicht auszumachen. lesen

Embedded Software mit Ada und SPARK erstellen

Programmierwettbewerb „Make with Ada“

Embedded Software mit Ada und SPARK erstellen

AdaCore ruft zum Embedded Software Developer aus aller Welt zum dritten Mal zur Teilnahme am Programmierwettbewerb „Make with Ada“ auf. Für den ersten Platz winkt dabei ein Preisgeld von 5.000 US-Dollar. lesen

OWASP – Community für Anwendungssicherheit

Open Web Application Security Project

OWASP – Community für Anwendungssicherheit

OWASP ist eine offene Community mit Fokus auf dem Thema IT-Security in Anwendungen mit Schwerpunkt auf Web-Anwendungen. Neben guten Infos gibt es auch spannende Tools für Entwickler und Security-Interessierte. lesen

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 45467282 / Definitionen)