Cmake introduction

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

Link2: Einfache Einführung

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.

..