CMake Kochbuch
Dieses Repository sammelt Quellen für die Rezepte, die im von Packt veröffentlichten und von Radovan Bast und Roberto Di Remigio verfassten CMake Cookbook enthalten sind
Inhaltsverzeichnis
Kapitel 1: Von einer einfachen ausführbaren Datei zu Bibliotheken
- 1. Kompilieren einer einzelnen Quelldatei in eine ausführbare Datei
- 2. Generatoren wechseln
- 3. Aufbau und Verknüpfung statischer und gemeinsam genutzter Bibliotheken
- 4. Steuern der Kompilierung mit Bedingungen
- 5. Dem Benutzer Optionen präsentieren
- 6. Angabe des Compilers
- 7. Wechsel des Build-Typs
- 8. Compiler-Flags steuern
- 9. Den Standard für die Sprache festlegen
- 10. Verwendung von Kontrollflusskonstrukten
Kapitel 2: Erkennen der Umgebung
- 1. Erkennen des Betriebssystems
- 2. Umgang mit plattformabhängigem Quellcode
- 3. Umgang mit Compiler-abhängigem Quellcode
- 4. Entdecken der Host-Prozessor-Architektur
- 5. Ermitteln des Befehlssatzes des Host-Prozessors
- 6. Aktivieren der Vektorisierung für die Eigenbibliothek
Kapitel 3: Erkennen externer Bibliotheken und Programme
- 1. Erkennen des Python-Interpreters
- 2. Erkennen der Python-Bibliothek
- 3. Erkennen von Python-Modulen und -Paketen
- 4. Erkennen der Mathematikbibliotheken BLAS und LAPACK
- 5. Erkennen der OpenMP-Parallelumgebung
- 6. Erkennen der MPI-Parallelumgebung
- 7. Erkennen der Eigen-Bibliothek
- 8. Erkennen der Boost-Bibliotheken
- 9. Externe Bibliotheken erkennen: I. Verwendung von
pkg-config
- 10. Externe Bibliotheken erkennen: II. Ein Find-Modul schreiben
Kapitel 4: Tests erstellen und ausführen
- 1. Erstellen eines einfachen Komponententests
- 2. Definieren eines Komponententests mithilfe der Catch2-Bibliothek
- 3. Definieren eines Unit-Tests und Verknüpfen mit Google Test
- 4. Definieren eines Unit-Tests und Verknüpfen mit dem Boost-Test
- 5. Verwendung dynamischer Analyse zur Erkennung von Speicherfehlern
- 6. Testen erwarteter Fehler
- 7. Timeouts für lange Tests verwenden
- 8. Parallele Ausführung von Tests
- 9. Ausführen einer Teilmenge von Tests
- 10. Verwendung von Testvorrichtungen
Kapitel 5: Konfigurationszeit- und Buildzeit-Vorgänge
- 1. Verwendung plattformunabhängiger Dateioperationen
- 2. Ausführen eines benutzerdefinierten Befehls zum Konfigurationszeitpunkt
- 3. Ausführen eines benutzerdefinierten Befehls zur Erstellungszeit: I. Verwenden von
add_custom_command
- 4. Ausführen eines benutzerdefinierten Befehls zur Erstellungszeit: II. Verwenden von
add_custom_target
- 5. Ausführen benutzerdefinierter Befehle für bestimmte Ziele zur Build-Zeit
- 6. Sondierungskompilierung und -verknüpfung
- 7. Compiler-Flags prüfen
- 8. Sondierungsausführung
- 9. Feinabstimmung der Konfiguration und Kompilierung mit Generatorausdrücken
Kapitel 6: Quellcode generieren
- 1. Generieren von Quellen zum Konfigurationszeitpunkt
- 2. Generieren des Quellcodes zum Konfigurationszeitpunkt mit Python
- 3. Generieren von Quellcode zur Build-Zeit mit Python
- 4. Aufzeichnen der Projektversionsinformationen zur Reproduzierbarkeit
- 5. Aufzeichnen der Projektversion aus einer Datei
- 6. Aufzeichnen des Git-Hashs zum Konfigurationszeitpunkt
- 7. Aufzeichnen des Git-Hashs zur Erstellungszeit
Kapitel 7: Projekte strukturieren
- 1. Wiederverwendung von Code mit Funktionen und Makros
- 2. CMake-Quellen in Module aufteilen
- 3. Schreiben einer Funktion zum Testen und Setzen von Compiler-Flags
- 4. Definieren einer Funktion oder eines Makros mit benannten Argumenten
- 5. Funktionen und Makros neu definieren
- 6. Funktionen, Makros und Variablen ablehnen
- 7. Begrenzen des Bereichs mit
add_subdirectory
- 8. Vermeiden globaler Variablen mithilfe von
target_sources
- 9. Fortran-Projekte organisieren
Kapitel 8: Das Superbuild-Muster
- 1. Verwendung des Superbuild-Musters
- 2. Abhängigkeiten mit einem Superbuild verwalten: I. Die Boost-Bibliotheken
- 3. Abhängigkeiten mit einem Superbuild verwalten: II. Die FFTW-Bibliothek
- 4. Abhängigkeiten mit einem Superbuild verwalten: III. Das Google Test-Framework
- 5. Verwalten Sie Ihr Projekt als Superbuild
Kapitel 9: Gemischtsprachige Projekte
- 1. Erstellen von Fortran-Projekten, die C/C++-Bibliotheken verwenden
- 2. Erstellen von C/C++-Projekten, die Fortran-Bibliotheken verwenden
- 3. Erstellen von C++- und Python-Projekten mit Cython
- 4. Erstellen von C++- und Python-Projekten mit Boost.Python
- 5. Erstellen von C++- und Python-Projekten mit pybind11
- 6. Mischen von C, C++, Fortran und Python mit Python CFFI
Kapitel 10: Einen Installer schreiben
- 1. Installation Ihres Projekts
- 2. Export-Header generieren
- 3. Exportieren Sie Ihre Ziele
- 4. Installieren eines Superbuilds
Kapitel 11: Verpackungsprojekte
- 1. Generieren von Quell- und Binärpaketen
- 2. Verteilen eines mit CMake/pybind11 erstellten C++/Python-Projekts über PyPI
- 3. Verteilen eines mit CMake/CFFI erstellten C/Fortran/Python-Projekts über PyPI
- 4. Verteilen eines einfachen Projekts als Conda-Paket
- 5. Verteilen eines Projekts mit Abhängigkeiten als Conda-Paket
Kapitel 12: Baudokumentation
- 1. Baudokumentation mit Doxygen
- 2. Baudokumentation mit Sphinx
- 3. Kombination von Doxygen und Sphinx
Kapitel 13: Alternative Generatoren und Cross-Compilation
- 1. Cross-Kompilierung eines Hallo-Welt-Beispiels
- 2. Cross-Kompilierung einer Windows-Binärdatei mit OpenMP-Parallelisierung
Kapitel 14: Dashboards testen
- 1. Bereitstellen von Tests im CDash-Dashboard
- 2. Meldung der Testabdeckung an das CDash-Dashboard
- 3. Den AddressSanitizer verwenden und Speicherfehler an CDash melden
- 4. Den ThreadSanitizer verwenden und Datenrennen an CDash melden
Kapitel 15: Portieren eines Projekts nach CMake