2014-09-11 5 views

Antwort

217

Make (oder besser ein Makefile) ist ein Buildsystem - es steuert den Compiler und andere Build-Tools, um Ihren Code zu erstellen.

CMake ist ein Generator von Bausystemen. Es kann Makefiles erzeugen, es kann Ninja Build-Dateien erzeugen, es kann KDEvelop- oder XCode-Projekte erzeugen, es kann Visual Studio-Lösungen erzeugen. Vom selben Startpunkt aus dieselbe CMakeLists.txt-Datei. Wenn Sie also ein plattformunabhängiges Projekt haben, ist CMake ein Weg, es auch systemunabhängig zu machen.

Wenn Sie Windows-Entwickler an Visual Studio und Unix-Entwickler gewöhnt haben, die auf GNU Make schwören, ist CMake (einer der) Weg (e) zu gehen.

Ich würde immer empfehlen, CMake (oder einen anderen Buildsystem-Generator, aber CMake ist meine persönliche Vorliebe) zu verwenden, wenn Sie beabsichtigen, dass Ihr Projekt plattformübergreifend oder weit verwendbar ist. CMake selbst bietet auch einige nette Funktionen wie Abhängigkeitserkennung, Bibliotheksschnittstellenverwaltung oder Integration mit CTest, CDash und CPack.

Die Verwendung eines Buildsystem-Generators macht Ihr Projekt zukunftssicherer. Selbst wenn Sie jetzt GNU-Make-only sind, was ist, wenn Sie später entscheiden, auf andere Plattformen zu erweitern (sei es Windows oder etwas eingebettet), oder einfach nur eine IDE verwenden möchten?

+0

Danke! Nur um zu bestätigen, dass, wenn ich nur auf Linux-Umgebung als nur Makefile programmiere, ausreichend ist, aber wenn ich möchte, dass das Programm von Linux in Mac läuft, ist cmake die bessere Option, da ich das verstehe, müssen wir kein neues Makefile machen der Mac aber läuft nur der cmake. Ist das der springende Punkt? – rish

+3

@rish Ja, das ist das Wesentliche. Beachten Sie jedoch, dass es mehr Möglichkeiten gibt, unter Linux als Makefiles zu programmieren - siehe z.B. QtCreator, KDEvelop, Ninja. Für jedes von diesen ist es entweder "ein Projekt erstellen und es mit dem Makefile synchronisieren" oder "CMake erneut ausführen". Und wie die Antwort erwähnt, hat CMake auch andere Funktionen, wie die Erkennung von Abhängigkeiten (zB ['find_package()'] (http://www.cmake.org/cmake/help/v3.0/command/find_package.html)) oder Test-/Verpackungsunterstützung. – Angew

+3

Ich habe gelesen, dass CMake nicht-rekursive Makefiles erstellen kann. Ist das immer noch wahr? –

Verwandte Themen