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

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

AWX und Ansible Tower 3.2 einrichten und nutzen

DevOps-Enabler Ansible, Teil 4

AWX und Ansible Tower 3.2 einrichten und nutzen

Nach der Installation von Ansible Tower werfen wir einen optionalen Blick auf die Installation von AWX, um uns dann mit Konzept und Arbeitsweise der grafischen Oberfläche für Ansible vertraut zu machen. Ab hier unterscheiden sich AWX und Ansible Tower kaum. lesen

Swift unter Ubuntu Linux verwenden

App-Entwicklung mit Apple Swift, Teil 2

Swift unter Ubuntu Linux verwenden

Apple bietet die Programmiersprache Swift offiziell auch für Ubuntu-Linux an. Dadurch erschließt sich die einfache Welt von Swift auch Anwendern, die keinen Mac verwenden. Leider ist das nicht ganz so komfortabel wie Swift mit XCode auf dem Mac. lesen

12 Best Practices für sichere AWS-Konfigurationen

Palo Alto über Amazon Web Services

12 Best Practices für sichere AWS-Konfigurationen

Fehlkonfigurierte Server, offene S3-Buckets, unbeaufsichtigter Datenverkehr: Innerhalb einer AWS-basierten Infrastruktur können sich viele Probleme auftun. Palo Alto Networks hat deshalb ein Dutzend Security-Best-Practices ausformuliert. lesen

Was ist Ant?

Definition „Apache Ant“

Was ist Ant?

Apache Ant ist ein Werkzeug in Form einer Java-Bibliothek, die das Bauen und Verteilen von Software automatisieren kann. Das Tool übernimmt dabei zuverlässig zahlreiche Routineaufgaben. lesen

Docker-Orchestrierung mit Kubernetes oder Swarm

Docker Enterprise Edition 2.0

Docker-Orchestrierung mit Kubernetes oder Swarm

Die Docker Enterprise Edition 2.0 unterstützt die Orchestrierung von Containern mit Kubernetes. Docker Swarm lässt sich aber selbstredend weiterhin nutzen. Das erhöht die Flexibilität beim Aufbau von Container-Clustern. lesen

Was ist ein Build?

Definition „Code Build“

Was ist ein Build?

Als Build bezeichnet die Softwareentwicklung einerseits den gesamten Prozess der Erzeugung einer kompletten, eigenständig lauffähigen Software und andererseits das Ergebnis dieses Prozesses: das oder die ausführbaren Programme einschließlich aller eventuell benötigten Ressourcen. lesen

RAD Studio mit iOS- und Android-Support

Verbesserungen für Embarcadero-Entwicklungsumgebung

RAD Studio mit iOS- und Android-Support

Die Entwicklungsumgebung RAD Studio 10.2 Tokyo von Embarcadero hat etliche Verbesserungen erhalten. Ab der Professional Edition lassen sich nun Cross-Platform-Apps für Windows, macOS, Android und iOS erstellen. lesen

DSGVO konforme Elektronikentwicklungen

Whitepaper für Entwickler, Produktmanager und Einkäufer

DSGVO konforme Elektronikentwicklungen

Die DSGVO regelt die Verarbeitung personenbezogener Daten neu. Sie wird am 25. Mai 2018 rechtsverbindlich. Rutronik beschreibt jetzt in einem Whitepaper wesentliche Bereiche, die für Hardware- und Software-Entwickler, Produktmanager und Einkäufer bei der Umsetzung der DSGVO entscheidend sind. lesen

Embedded Code erfordert hohe Sorgfalt

Software-Design für gute Codequalität, Teil 1

Embedded Code erfordert hohe Sorgfalt

Guter Code ist Code, der offensichtlich korrekt ist. Offensichtlich korrekter Code ist einfach lesbar, einfach zu warten und einfach überprüfbar. Wie erstellt man also guten Code? lesen

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 45467282 / Definitionen)