Etwas Grundlagen:
Früher hat man ein Projekt ein "Makefile" geschrieben. Das ist eine Textdatei. Sie enthält eine
Liste aller Quelltextdateien, die übersetzt werden müssen, und die Anweisungen,
wie sie übersetzt werden müssen. Außerdem konnte man noch
Abhängigkeiten angeben, damit bei Änderung von Datei A automatisch die Dateien X und Y neu übersetzt werden und der Linker das Programm neu bindet.
Die Datei hieß i.a. "Makefile", und man hat im selben Verzeichnis das Kommando "make" aufgerufen. Das kann man heute noch so machen und ist für kleinere Programme auch legitim.
Für größere Programme schreibt man heute das "Makefile" nicht mehr selbst, sondern benutzt einen Makefile-Generator. Davon gibt es mehrere, und
cmake ist der weitestverbreitete. Ein Vorteil von
cmake ist, daß man unterschiedliche Betriebssysteme und Compiler berücksichtigen kann. So erzeugt
cmake je nach Umgebung ein angepaßtes "Makefile" mit entsprechenden Compiler-Einstellungen.
Die zentrale Steuerdatei für
cmake ist i.a. "CMakeLists.txt". Hieraus macht
cmake dann das Makefile. Damit man sein Projektverzeichnis nicht mit Kompilaten vollschreibt (man möchte Quelltexte trennen von den Dateien, die temporär erzeugt werden), verwendet man ein "build"-Verzeichnis. Nach Konvention heißt es "build", der Name ist aber egal. Fast alle modernen Programme werden so erzeugt:
- Ein "build"-Verzeichnis wird erzeugt und betreten. Hier landet der ganze temporäre Müll, aber auch das fertige Programm.
- Man ruft "cmake .." auf, dabei ist ".." der Parameter, mit Leerzeidchen getrennt, der dem cmake sagt wo es die Datei CMakeLists.txt suchen soll.
- Das cmake rattert rum, macht dies, das, Ananas und erzeugt schließlich ein "Makefile".
- Wie oben beschrieben, kann man jetzt per "make" den Bau-Prozeß starten.
- Abschließend kann man den "build"-Ordner wieder verlassen.
Das
cmake sollte in das "Makefile" einen Mechanismus einbauen, der erkennt, wenn das "Makefile" selbst neu erzeugt werden muß, also von der Theorie her braucht man
cmake fürderhin nicht mehr zu starten, sondern immer nur
make, es sei denn es geht etwas schief. Wenn man Quelltextdateien hinzufügt oder entfernt, könnte das nötig sein.
Abschließend: Man kann dem "cmake" auch Parameter mitgeben, um die Generierung des
Makefile zu beeinflussen, z.B. wenn man einen "debug build" will. Warum man das nicht später beim
make festlegt? Keine Ahnung, bin kein cmake-Spezialist ...