Moderne, zielbasierte CMake‑Workflows sicher anwenden – Projekte sauber konfigurieren, bauen, testen und paketieren.
Generatoren (Ninja, Makefiles), Toolchains und Policies verstehen; robuste find_package
‑Configs schreiben und wiederverwendbare Targets exportieren.
Externe Abhängigkeiten mit FetchContent
und ExternalProject
verwalten; Tests mit CTest/CDash integrieren.
Praktische Erfahrung sammeln in intensiven Hands‑on‑Übungen (~70%), die realistische Codebasen widerspiegeln.
Wie CMake hilft: Portabilität über Plattformen/Compiler, reproduzierbare Builds, klare Abhängigkeitsgraphen und reibungsloses CI/CD‑Packaging mit CPack.
Für wen: konzipiert für Personen mit Erfahrung in C++ oder C, die moderne CMake‑Praktiken im Produktionsteam einsetzen möchten.
Am Ende strukturierst du Projekte souverän, debuggst CMake‑Skripte und skalierst zu fortgeschrittenen Themen (CUDA, MPI, Cross‑Compiling).
Curriculum
Begrüßung und Setup
- Entwicklungs-Setup für C++ und CMake sicherstellen
- Grundinstallation und Setup von CMake
Einführung in CMake
- Überblick über CMake und seine Rolle in modernen Build-Systemen
- Wichtigste Features und Vorteile von CMake
- Verständnis des CMake-Workflows
- Source-Konfiguration
- Generierung des Build-Systems
- Build-Ausführung
CMake-Workflow
- Konfigurations-Workflow in CMake
- Erstes CMakeLists.txt schreiben
- Konfigurieren und Generieren eines Build-Systems
- CMake über Kommandozeile und IDEs ausführen
- CMake-Generatoren verstehen (Makefiles, Ninja, etc.)
Bibliotheken und Executables bauen
- Targets in CMake definieren und verwalten
- add_executable und add_library
- Bibliotheken und Abhängigkeiten linken
- target_link_libraries
- Variablen in CMake: regular vs. cache variables
- Build-Konfigurationen mit CMake-Variablen steuern
- Überblick über den zielzentrierten Ansatz von modernem CMake
- Best Practices für den Aufbau und die Strukturierung von Projekten
- Compiler und Compileroptionen festlegen
- Sprachstandard festlegen
- Mit Umgebungsvariablen arbeiten
- Mit verschiedenen CPU-Architekturen arbeiten
Weitere CMake-Syntax
- CMake-Syntax und unterstützte Befehle
- Kontrollfluss in CMake-Skripten (if, foreach, while)
- Verwendung von Generator Expressions ($<...>) für bedingte Logik
- Target-Eigenschaften und fortgeschrittenes Target-Management
- Targets installieren und Installationsregeln erstellen
- Praktische Tipps und Tricks (hands-on)
Targets importieren und exportieren
- Exportierbare Targets mit install(EXPORT) erstellen
- find_package() verwenden und Config-Dateien schreiben
- Third-Party-Targets importieren und Abhängigkeiten verwalten
- Best Practices für wiederverwendbare und portable CMake-Konfigurationen
ExternalProject und FetchContent
- Einführung ins Management externer Projekte in CMake
- ExternalProject_Add zum Bauen externer Abhängigkeiten verwenden
- Überblick über FetchContent zur Vereinfachung des Dependency-Managements
- Praktische Beispiele und Anwendungsfälle
CMake-Richtliniensystem
- Das Policy-System von CMake verstehen
- Policy-Warnungen und -Fehler handhaben
- Best Practices für den Umgang mit Policies
- Bemerkenswerte Änderungen in aktuellen CMake-Releases
CMake-Skripte debuggen und profilieren
- Debugging mit message() und cmake --trace
- CMake-Builds profilieren, um Performance zu optimieren
- Häufige CMake-Probleme verstehen und beheben
Begleitwerkzeuge und Test-Framework
- Tests mit CTest schreiben und ausführen
- Testabdeckung und dynamische Analyse-Tools integrieren
- Einführung in CDash für Continuous Integration und Testing
- Überblick über das Packaging-Tool: CPack
- Praktische Übungen mit CTest und CPack
Fortgeschrittene Themen in CMake
- CMake-Unterstützung für MPI (Message Passing Interface)
- MPI-Projekte einrichten und verwalten
- CUDA-Unterstützung in CMake
- CUDA-Anwendungen mit CMake bauen
- Cross-Kompilierung mit CMake
- Toolchains einrichten und Cross-Kompilierung
- Fortran-Unterstützung in CMake
- Fortran-Projekte konfigurieren und bauen
Kursablauf
- Teil 1: 09:00–10:30
- Kaffeepause: 10:30–10:45
- Teil 2: 10:45–12:15
- Mittagspause: 12:15–13:15
- Teil 3: 13:15–15:15
- Kaffeepause: 15:15–15:30
- Teil 4: 15:30–17:30