lernen:cmake
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | lernen:cmake [2020-08-23 20:03] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== CMake ====== | ||
+ | |||
+ | Um aus C++-Quelltexten ausführbare Programme zu machen, sind je nach System andere Schritte notwendig. In Entwicklungsumgebungen werden Projekte erstellt, Quelltexte registriert, | ||
+ | |||
+ | Das Ziel von [[https:// | ||
+ | |||
+ | ===== Ein erstes Projekt erstellen ===== | ||
+ | |||
+ | CMake beschreibt das Projekt in menschenlesbarer Form. In der Datei '' | ||
+ | |||
+ | < | ||
+ | cmake_minimum_required(VERSION 3.18) | ||
+ | project(beispiel) | ||
+ | |||
+ | # zu erzeugende Ziele + deren Quellen: | ||
+ | add_executable(programm src/ | ||
+ | </ | ||
+ | Zum Übersetzen sollte ein getrenntes Verzeichnis '' | ||
+ | |||
+ | <code bash> | ||
+ | mkdir build # Verzeichnis anlegen | ||
+ | cd build # und hinein wechseln | ||
+ | cmake -G "MinGW Makefiles" | ||
+ | cmake --build . # Projekt übersetzen | ||
+ | programm | ||
+ | </ | ||
+ | Der Befehl '' | ||
+ | |||
+ | Für spätere Änderungen am Projekt entfällt die Angabe des Generators: | ||
+ | |||
+ | <code bash> | ||
+ | cmake .. # bei Änderungen an CMakeLists.txt | ||
+ | cmake --build . # bei Änderungen am Quelltext | ||
+ | cmake --build . --target programm | ||
+ | </ | ||
+ | Als Targets dienen auch '' | ||
+ | |||
+ | ===== C++-Version vorgeben ===== | ||
+ | |||
+ | Den Sprachstandard kann man vor allen Zielen global festlegen (C++20 kennt CMake ab Version 3.12, C++17 ab 3.8): | ||
+ | |||
+ | < | ||
+ | set(CMAKE_CXX_STANDARD 20) | ||
+ | set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
+ | set(CMAKE_CXX_EXTENSIONS OFF) | ||
+ | </ | ||
+ | Bei komplexeren Projekten empfiehlt sich die Angabe für jedes Ziel separat | ||
+ | |||
+ | < | ||
+ | set_target_properties(myTarget | ||
+ | PROPERTIES | ||
+ | CXX_STANDARD 20 | ||
+ | CXX_STANDARD_REQUIRED ON | ||
+ | CXX_EXTENSIONS OFF | ||
+ | ) | ||
+ | </ | ||
+ | oder über erforderliche Compiler-Merkmale (siehe Dokumentation zu [[https:// | ||
+ | |||
+ | < | ||
+ | target_compile_features(myTarget PRIVATE cxx_std_20) | ||
+ | </ | ||
+ | ===== Mehrere Dateien ===== | ||
+ | |||
+ | Mehrere Quellen werden bei der Festlegung des Ziels aufgeführt oder später ergänzt: | ||
+ | |||
+ | < | ||
+ | add_executable(programm quelle1.cpp quelle2.cpp) | ||
+ | target_sources(programm zusatzquelle1.cpp zusatzquelle2.cpp) | ||
+ | </ | ||
+ | Verzeichnisse wie '' | ||
+ | |||
+ | < | ||
+ | target_include_directories(programm include) | ||
+ | target_source_directories(programm src) | ||
+ | </ | ||
+ | ===== Bibliotheken erstellen und einbinden ===== | ||
+ | |||
+ | Auch Bibliotheken sind Ziele in CMake: | ||
+ | |||
+ | < | ||
+ | add_library(libname libsrcfiles) | ||
+ | target_link_libraries(programm libname) | ||
+ | </ | ||
+ | ===== Unterprojekte bauen ===== | ||
+ | |||
+ | Unterverzeichnisse mit eigener '' | ||
+ | |||
+ | < | ||
+ | add_subdirectory(dirname) | ||
+ | </ | ||
lernen/cmake.txt · Zuletzt geändert: 2020-08-23 20:03 von 127.0.0.1