Die ersten Folien zielen auf die Arbeit auf der Kommandozeile, wie es unter Linux üblich ist. Windows-Spezifische Herangehensweisen sind auf den hinteren Folien zu finden.
Zum Betrachten der nächsten Seite "Bild ab" drücken oder nach unten scrollen.
Eine typische Entwicklungsumgebung (IntelliJ für Java):
Quellen werden irgendwie "magisch" übersetzt.
cmake definiert ein Projekt unabhängig von der Entwicklungsumgebung. Ziel ist in der Regel C/C++. Auch andere Programmiersprachen werden mehr oder weniger gut unterstützt. Ähnliche Ansätze gibt es für viele Programmiersprachen: ant, gradle, maven, scons, meson, automake,…
Geschieht in einer einfachen Textdatei mit dem Namen CMakeLists.txt
.
Vereinfachtes Beispiel:
add_executable(myexecutable src/mysource.cpp)
Vollständiges Beispiel:
cmake_minimum_required(VERSION 3.1)
project(myproject)
add_executable(myexecutable src/mysource.cpp)
myexecutable
ist der Name der Anwendung und das Ziel für die Übersetzung der Quellen.
Aufruf von cmake:
cmake -S ordner/meines/codes -B ordner/für/baudateien
Merke: Es wird der Ordner ausgewählt, wo die CMakeLists.txt
enthalten ist, nicht die CMakeLists.txt
selbst.
Ausgaben (Beispiel):
-- The CXX compiler identification is GNU 11.4.0
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: ordner/für/baudateien
Hierfür gibt es mit cmake-gui
auch eine graphische Benutzeroberfläche.
Aufruf:
cmake --build ordner/für/baudateien
Ausgaben:
[ 50%] Building CXX object CMakeFiles/myexecutable.dir/mysource.cpp.o
[100%] Linking CXX executable myexecutable
[100%] Built target myexecutable
Diese Funktionalität ist in cmake-gui
nicht enthalten.
Aufruf:
ordner/für/baudateien/myexecutable
Ausgabe:
Halo, I bims!
Ein Ziel kann aus mehreren Quellen bestehen:
add_executable(myexecutable src/mysource.cpp src/additionalsource.cpp)
Alternativ ist es möglich, alle Dateien in einem Ordner für ein Ziel zu verwenden:
file(GLOB SOURCE_FILES src/*)
add_executable(myexecutable ${SOURCE_FILES})
Letzteres wird als schlechter Stil angesehen, weil aus der CMakeLists.txt
nicht mehr explizit hervorgeht, welche Dateien beteiligt sind. Kommen neue Dateien hinzu, muss manuell eine Neukonfiguration des Projektes angestoßen werden.
Ein Ziel kann Einstellungen haben, zum Beispiel kann die Sprachversion auf C++20 gesetzt werden:
set_property(TARGET myexecutable PROPERTY CXX_STANDARD 20)
Zur Übersicht hier nochmal die ganze CMakeLists.txt
:
cmake_minimum_required(VERSION 3.1)
project(myproject)
file(GLOB SOURCE_FILES src/*)
add_executable(myexecutable ${SOURCE_FILES})
set_property(TARGET myexecutable PROPERTY CXX_STANDARD 20)
Besonders Interessierte können Details über das Verhalten der Befehle in der Dokumentation nachlesen: cmake_minimum_required(…), project(…), file(GLOB …), add_executable(…), CXX_STANDARD
Ein mit cmake definiertes Projekt ist nicht nur in einer Entwicklungsumgebung nutzbar, sondern in vielen:
Natürlich kann auch weiterhin mit jedem Text-Editor und auf der Kommandozeile gearbeitet werden.
Beispiel für Aufruf von make
auf Linux:
make -C ordner/für/baudateien
Der Entwicklungsprozess bleibt gleich, doch welche Quellen wie übersetzt werden, ist in der CMakeLists.txt
klar definiert.