Ich code auf C/C++ und benutze (GNU) Makefile, um den Code zu kompilieren. Ich kann das gleiche mit CMake machen und ein MakeFile bekommen. Ich verstehe jedoch nicht, was der Unterschied zwischen Makefile und cmake ist, um den Code zu kompilieren.Unterschied zwischen der Verwendung von Makefile und cmake, um den Code zu kompilieren
Antwort
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?
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
@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
Ich habe gelesen, dass CMake nicht-rekursive Makefiles erstellen kann. Ist das immer noch wahr? –
- 1. Konvertierung von Makefile zu CMake
- 2. Was ist der Unterschied zwischen include_directories und target_include_directories in CMake?
- 3. Makefile, Kompilieren und Verknüpfen
- 4. Fehler 127 zu kompilieren "Makefile"
- 5. Makefile entspricht in CMake
- 6. Wie bekomme ich CMake, um bestehendes Makefile zu benutzen?
- 7. Was ist der Unterschied zwischen -I und -L im Makefile?
- 8. Unterschied zwischen -pthread und -lpthread beim Kompilieren
- 9. Service Fabric - Unterschied zwischen der Verwendung von app.config und settings.xml?
- 10. Was ist der Unterschied zwischen der Verwendung und der Nichtverwendung von Anweisungen mit DbContext [Code zuerst]?
- 11. Unterschied zwischen der Verwendung von Zeichenzeigern und Zeichenfeldern
- 12. Unterschied zwischen der Verwendung von train_test_split und cross_val_score in sklearn.cross_validation
- 13. Unterschied zwischen der Verwendung von StringTokenizer und String.split()?
- 14. Unterschied zwischen der Verwendung von Trace und TraceSource
- 15. C# DataGridView.DataSource Unterschied zwischen der Verwendung von BindingSource und nicht
- 16. Unterschied zwischen der Verwendung von `MySql.Data` und` MySql.Data.MySqlClient`
- 17. Der Unterschied zwischen den Schleifen
- 18. Externes Makefile mit CMake einbinden
- 19. Unterschied zwischen der Verwendung von UINavigationController und UINavigationBar
- 20. Was ist der Unterschied zwischen der Verwendung externer und # Headerdateien?
- 21. Verwendung von LDFLAGS in Makefile
- 22. Makefile zum Kompilieren von OpenCV Code in C++ unter Ubuntu/Linux
- 23. Wie konfiguriere ich cmake um informix * .ec Dateien zu kompilieren?
- 24. Unterschied zwischen der Verwendung von requests.get() und requests.session(). Get()?
- 25. Unterschied zwischen der Verwendung von VertexPositionNormalTexture und VertexPositionTexture
- 26. Unterschied zwischen der Verwendung von Anführungszeichen und Anführungszeichen in Python
- 27. Unterschied zwischen der Verwendung von fork/execvp und Systemaufruf
- 28. Wie kompilieren CMake für ARM mit CMake
- 29. Was ist der Unterschied zwischen "kompilieren" und "bauen"?
- 30. Was ist der Unterschied zwischen Debug und Kompilieren?
cmake kann auch Dateien zur Verwendung von Ninja –