Automatisches Generieren von Makefiles
$ mkdir build $ cd build $ cmake .. // führt die CMakeList.txt aus = generiert Makefiles // cmakeList.txt liegt ein Verzeichnis weiter unten $ make // führt die Makefiles aus
Mit cmake werden Makefiles generiert. Alle Makefiles liegen im Ordner build. Alle Dateien, die die Programme zur Ausführung brauchen, müssen im build liegen.
Mehrere Executables
CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(HuffmanDecoder) ADD_DEFINITIONS("-std=c++11 -g") ADD_EXECUTABLE(decoder main.cpp FileStreamReader.cpp HuffmanDecoder.cpp BinaryTree.cpp EndoscopeImage.cpp ) ADD_EXECUTABLE(decoder_fullversion decoder.cpp FileStreamReader.cpp HuffmanDecoder.cpp BinaryTree.cpp EndoscopeImage.cpp ) ADD_EXECUTABLE(encoder encoder.cpp FileStreamReader.cpp HuffmanDecoder.cpp BinaryTree.cpp EndoscopeImage.cpp ) ADD_EXECUTABLE(testTree testTree.cpp BinaryTree.cpp )
Will man nur ein bestimmtes Projekt kompilieren, schreibt man:
$ make testTree && ./testTree
Durch && ./executalbe wird das Programm direkt ausgeführt.
Referenzen im Netz
Link1: Anleitung für Programmiererinnen
Make bedeutet kompilieren (und linken). Will man mehrere Dateien kompilieren und dann auch linken, genügt ein einfacher Shell-Befehl gcc -o main.c test nicht mehr. Man macht dann ein Makefile, in dem durch Pfad-Variablen und Variablen der Datein, das Kompilieren, Linken vereinfacht wird.
Die Aufgabe von Cmake ist es, Makefiles automatisiert zu erstellen. Der Aufruf cmake funktioniert nur, wenn im Zielordner auch die Datei CMakeLists.txt liegt. In jedem Unterordner liegt eine CMakeLists.txt
cmake pfad/zu/dateien
Alle wichtigen Ergebnisse des Kompilieren, Linkens legt das Programm selbständig in diese Datei ab.
………………………………………………………………………………….
Projektstruktur
project / CMakeList.txt // das main CMake
. / source / CMakeList.txt // jeder Unterordner braucht sein CMake
. main.cpp
. classb.cpp
. /build/ // nur hier kein CMakeList.txt
.
Erhält man ein Programm aus einer Plattform, wird das Programm oft so gebildet:
$ mkdir build $ cd build $ cmake .. // führt die CMakeList.txt aus = generiert Makefiles $ make // führt die Makefiles aus
……………………………………………………………………………………….
CMake legt auch eine CMakeCache.txt Datei selbständig an. Darin sind alle Konfigurationen gespeichert. Diese Datei sollte nicht manuell geändert werden.
Das Programm wird oft nicht im Ordner der Quelldateien abgelegt. Man kann einen Ordner build angeben oder /user/bin nehmen.
Hauptdatei: CMakeLists.txt
add_executable(hallowelt main.c)
Hat man mehrere Files, so werden diese in einer Varibale zusammengefasst
SET( SOURCE main.c calculator.c) Mit set werden Variablen gesetzt
Braucht man später die Variable, so geschieht dies mit ${SOURCE} .
add_executable(calculator ${SOURCE})
PROJECT( name )
INCLUDE_DIRECTORY( /usr/bin )
TARGET_LINK_LIBRARIES()
ADD_DEFINITIONS()
INSTALL( TARGETS <programm> RUNTIME DESTINATION bin)
Variable zu bereits bestehenden Variablen hinzufügen
SET( EXTRALIBS ${EXTRALIBS} /usr/local/bla)
Fett stehen hier alle alten Pfade zu Bibliotheken, danach kommt der neue Pfad.
Ein typisches Beispiel ist die Umgebungsvariable PATH. Dort wird auch zu ${PATH} <neuer Pfad> dazugeführt.
..