CMake oder machen. Brauche ich beides?

Lesezeit: 3 Minuten

Neulingsfrage. Ich bin kürzlich auf ein Projekt gestoßen, das viele Dateien und externe Bibliotheken enthielt. Einige dieser Bibliotheken enthielten Makefiles und CMakeLists.txt. Ich baue ein ähnliches Projekt auf, das externe Bibliotheken einbezieht. Ist es notwendig, sowohl CMake als auch make zu lernen? Oder reicht CMake aus?

Florians Benutzeravatar
Florian

So gestalten Sie das Konzept hinter CMake

Es ist nicht nötig, das Schreiben eines zu lernen makefileda CMake ein ist Abstraktionsschicht oder „meta-make“ generiert die Makefiles für Sie. Und wie bei jeder Abstraktionsschicht müssen Sie nur lernen, ihre Funktionen zu nutzen. Sie müssen aber auch die Aufgabe verstehen, für die es entwickelt wurde. In diesem Fall zB Was ist ein Build-Tool? oder Was ist eine native Build-Umgebung?

Wofür steht das „c“ in cmake?

Aber cmake – in Kombination mit ctest, cpack und cdash – ist viel mehr als das: Es macht (meistens) das Erlernen der Compiler-/Linker-Schalter, der Handhabung von Bibliotheken/ausführbaren Dateien und deren Installation durch Ihre Plattformen/Frameworks usw. überflüssig.

  • Cross-Compile
  • Plattformübergreifend
    • Es funktioniert auf allen Arten von Betriebssystemen (zusammengefasst unter CMakes Download-Seite) mit unterschiedlichen Setups
    • Es funktioniert mit vielen IDEs oder ist direkt in diese integriert Herausgeber wie zB Visual Studio oder CLion
    • Es kann auf bestimmte Zielplattformen wie z. B. Cross-Kompilierung durchgeführt werden Android zusammengefasst in CMake-Toolchains
  • Sprachübergreifend
    • Es unterstützt hauptsächlich C/C++, unterstützt aber auch z. B. Asm, RC, Fortran und with CMake-Version 3.8 C#
    • Da eine mittelgroße Skriptsprache eingebettet ist, entfällt die Notwendigkeit, andere Skriptsprachen zu erlernen (die häufig zum Durchführen von Schritten vor oder nach dem Erstellen verwendet werden).

Unterschied zwischen der Verwendung von Makefile und cmake zum Kompilieren des Codes

Aus meiner Erfahrung mit der Verwendung von CMake in meinen Projekten:

  • Der Nachteil: Sie müssen es in allen Zielumgebungen testen (zugegebenermaßen ist das nichts Spezifisches für CMake). In einer geschlossenen Umgebung (z. B. innerhalb eines Unternehmens) ist die Wartung relativ einfach, aber beispielsweise in einer Open-Source-Umgebung wird es immer den einen oder anderen Präzedenzfall geben, bei dem Sie Ihr CMake-Skript ein wenig optimieren müssen.

  • Der Vorteil: CMake wird in C/C++-Projekten häufig verwendet/unterstützt und gibt mir als potenziellem Benutzer Ihres Projekts die Möglichkeit, meine Build-Umgebung zu nutzen und das Tool meiner Wahl auszuwählen (z. B. habe ich es ersetzt). make mit ninja in meinen Projekten).

Verweise

  • C++-Build-Systeme – Was verwenden?
  • C++-Build-Systeme

CMake ist ein Makefile-Generator (und andere Projektdateien). Du musst nicht lernen make es sei denn, Sie möchten eine Verbindung zu CMake selbst herstellen.

Allerdings etwas klassisch make Kenntnisse sind immer noch nützlich, wie zum Beispiel:

  • Vorbeigehen an der -j Flag für Parallel
  • make V=1 für ausführliche Ausgabe
  • make clean zur Reinigung
  • make install und das DESTDIR Parameter

CMake ist ein Meta-Buildsystem.

Benutzen cmake und die Einstellungen in CMakeLists.txtCMake wird generieren die Build-Dateien für die Zielplattform. Das können Makefiles, Visual Studio-Lösungen, Ninja-Dateien, KDevelop-Projektdateien usw. sein.

Wenn das Projekt für die Verwendung von CMake eingerichtet ist, sollten Sie dies nicht einmal tun müssen sehen an den Buildfiles (Makefiles) generiert. Sie sind streng vorübergehend.

  • @Rienhart_: Darf ich schamlos Werbung machen? Kiefer – ein gebrauchsfertiges CMake-Setup, das ich selbst erstellt habe und das eine Menge „Präsentation“ leistet, die mir in der offiziellen Dokumentation fehlte? Es könnte für Sie hilfreich sein, die Funktionsweise von CMake zu verstehen.

    – DevSolar

    27. April 2017 um 9:27 Uhr


1453340cookie-checkCMake oder machen. Brauche ich beides?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy