Den Zweck von CMake verstehen

8

Ich versuche den Zweck von CMake zu verstehen. Warum ist es so gestaltet, wie es gerade ist? Hier sind einige Fragen, die ich gerne beantwortet hätte.

  • Warum erzeugt CMake Makefiles anstatt nur das Projekt zu erstellen?
  • Warum sind cmake-Dateien eine Reihe von Befehlen und nicht nur Konfigurationsdateien, zB: ini / xml / yaml
  • Was sind die Befehle, die ich in die CMakeLists.txt schreiben soll? Es wäre zu einfach, den Compiler aufzurufen, denke ich
  • In welcher Reihenfolge soll ich die Befehle ausführen?
  • Ist alles egal? Kann ich alles klein schreiben?
  • Warum raten mir Tutorials, jede Quelldatei explizit aufzulisten?
  • Wie strukturiere ich meine CMakeLists.txt, um sie kurz und einfach zu halten. Jede Datei, die ich in realen Projekten suchte, sah sehr unübersichtlich aus.
Arne 09.09.2014, 18:28
quelle

2 Antworten

11

Es kann schwierig sein zu verstehen, wie CMake funktioniert. Ich werde mein Bestes tun, um einige der Fragen, die du gestellt hast, kurz zu beantworten.

  

Warum erzeugt CMake Makefiles, anstatt nur das Projekt zu erstellen?

CMake ist ein plattformübergreifendes make-System und ist compilerunabhängig. Es generiert nicht nur make-Build-Systeme, sondern generiert auch Visual Studio-Lösungsdateien. Mit der gleichen CMakeList.txt Datei kann jemand einfach einen Windows Build (Visual Studio) oder einen Linux Build (g ++) erstellen.

  

Warum sind cmake-Dateien [eine Reihe von] Befehlen und nicht nur Konfigurationsdateien, zB: ini / xml / yaml

Compiler verwenden keine universelle Konfiguration, daher muss CMake sich an den Zielcompiler anpassen.

CMake-Dateien sind eine Reihe von Befehlen, um die entsprechende Konfiguration für den Zielcompiler zu generieren.

  

Was sind die Befehle, die ich in die CMakeLists.txt schreiben soll? Einfach den Compiler aufzurufen, wäre zu einfach, denke ich

Sie sollen die passende Konfiguration für den Ziel-Compiler erzeugen, und sie werden, wenn sie richtig geschrieben werden.

  

In welcher Reihenfolge soll ich die Befehle ausführen?

In der Reihenfolge, die zählt, wenn die Reihenfolge überhaupt von Bedeutung ist. Ja, es ist eine vage Antwort, aber es hängt vom Projekt ab. Zum Beispiel wird der Befehl include () verwendet, um zusätzliche cmake-Dateien hinzuzufügen, und wenn Sie sie in der falschen Reihenfolge einschließen, kann dies die Generierung des Build-Systems unterbrechen.

Der erste Befehl in Ihrer cmake-Datei muss die mindestens erforderliche Version mit der neuesten Version von CMake (3.0.1) sein. Von da hängt es ab. :)

Zum Beispiel funktioniert dieser Befehl nicht mit Versionen von CMake kleiner als 2.6. cmake_minimum_required (VERSION 2.6)

Siehe einige Tutorial Links am Ende dieser Antwort.

  

Ist alles egal? Kann ich alles Kleinbuchstaben schreiben?

Wie auf der -Syntaxseite des CMake-Wikis angegeben, wird bei allen Befehlen nicht zwischen Groß- und Kleinschreibung unterschieden, aber Sie müssen Berücksichtigen Sie den Fall für Inhalte, die an einen Befehl übergeben werden.

  

Warum empfehlen mir Tutorials, jede Quelldatei explizit aufzulisten?

Weil Sie jede Quelldatei explizit auflisten müssen. Dies kann in einer cmake-Datei oder in einer separaten Dateiliste erfolgen, auf die in der cmake-Datei verwiesen wird. Bitte beachten Sie die Antwort von Antonio, um eine gesonderte Dateiliste zu vermeiden.

CMake bietet einen Befehl aux_source_directory which sammelt die Namen aller Quelldateien in einem angegebenen Verzeichnis und speichert die Liste in einer Variablen, sollte aber nur für "generierte" Quelldateien verwendet werden, aus dem gleichen Grund wie in Antonio's Antwort .

  

Wie strukturiere ich meine CMakeLists.txt, um sie kurz und einfach zu halten. Jede Datei, die ich in realen Projekten suchte, sah sehr unübersichtlich aus.

Es ist sehr einfach, eine CMake-Datei zu verwirren, und eine Möglichkeit, dies zu unterstützen, ist die Verwendung von .cmake-Dateien, auf die Sie mit dem include-Befehl verweisen.

Eine gute Ressource (obwohl noch in Entwicklung) kann auf der CMake Seite gefunden werden.

Es ist in mehrere Abschnitte unterteilt:

  1. Übersicht
  2. Statistik (in Entwicklung)
  3. Teilnehmer
  4. Dokumentation
  5. Lizenz
  6. Erfolgsgeschichten
  7. Publikationen
  8. Neuigkeiten

Lernprogramme

CMake-Tutorial - Auf der offiziellen CMake-Dokumentationsseite

Erste Schritte mit CMake - Ein Tutorial, das CMake mit gcc verwendet.

>

Verwenden von CMake zum Erstellen von QT-Projekten - Ein Tutorial, das CMake mit QT verwendet.

    
jmstoker 09.09.2014, 21:27
quelle
2

Da jmstoker bereits eine sehr vollständige Antwort gegeben hat, werde ich mich auf diesen speziellen Punkt konzentrieren:

"Why do tutorials advise me to list every source file explicitly?"

In der Praxis können Sie Globbing-Funktionen verwenden. Das Problem ist jedoch, dass Sie, wenn Sie eine Datei hinzufügen, cmake explizit ausführen müssen, um CMake auf seine Anwesenheit aufmerksam zu machen. Es ist normalerweise kein Problem, wenn Sie "alleine" arbeiten, aber in einem gemeinsam genutzten Projekt kann es ein Problem sein, wenn jemand eine Datei hinzufügt, Sie aktualisiert und Sie dann mit merkwürdigen Fehlern kompilieren.

Mit git gibt es eine Lösung, die das Auslösen von "cmake" ermöglicht. jedes Mal, wenn eine Zusammenführung stattfindet. Cmake zum Ausführen vor dem Erstellen nach dem Ziehen von git

    
Antonio 10.09.2014 15:52
quelle

Tags und Links