Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

build:cmake:create-project [2022/07/02 11:51]
naums
build:cmake:create-project [2022/09/22 19:58]
Zeile 1: Zeile 1:
-====== Ein Projekt anlegen ====== 
  
-===== Ein erste Projekt ===== 
- 
-Um CMake zu ermöglichen unser Projekt zu bauen müssen wir beschreiben wie unser Projekt übersetzt werden muss. Dazu erstellen wir eine Datei mit dem Namen ''​CMakeLists.txt''​ und beschreiben in einer für CMake verständlichen Skriptsprache,​ alle benötigten Aspekte unseres Programms. Für ein einfache Hello-World Programm (einzige Quelldatei ist main.c) kann diese Datei zum Beispiel so ausschauen: 
- 
-<code cmake> 
-cmake_minimum_required(VERSION 3.10) 
- 
-project(HelloWorld) 
- 
-add_executable(hello_world main.c) 
-</​code>​ 
- 
-==== Das Projekt bauen ==== 
- 
-Der Vorgang das Projekt nun zu übersetzen besteht aus zwei Schritten: 
-  - Erzeugen eines Makefiles mit Cmake 
-  - Übersetzen des Projekts mithilfe des Makefiles 
- 
-Andere Ziele (bspw. Visual Studio Projektdateien) anstelle von Makefiles sind ebenfalls vorhanden. 
- 
-Dieses Projekt bauen wir wie folgt. Üblicherweise erstellen wir uns im Projektordner einen neuen Ordner ''​build''​. Dort wechseln wir hinein und führen das CMake-Programm aus: 
-  cmake .. 
-  ​ 
-CMake sucht nun im übergeordneten Verzeichnis (''​..''​) nach einer ''​CMakeLists.txt'',​ interpretiert sie, und legt eine Makefile an, die das Projekt entsprechend kompilieren soll. Wenn alles gut läuft, könnte die Ausgabe von CMake folgendermaßen aussehen: 
- 
-<​code>​ 
--- The C compiler identification is GNU 12.1.0 
--- The CXX compiler identification is GNU 12.1.0 
--- Detecting C compiler ABI info 
--- Detecting C compiler ABI info - done 
--- Check for working C compiler: /usr/bin/cc - skipped 
--- Detecting C compile features 
--- Detecting C compile features - done 
--- Detecting CXX compiler ABI info 
--- Detecting CXX compiler ABI info - done 
--- Check for working CXX compiler: /​usr/​bin/​c++ - skipped 
--- Detecting CXX compile features 
--- Detecting CXX compile features - done 
--- Configuring done 
--- Generating done 
--- Build files have been written to: /​home/​naums/​test/​build 
-</​code>​ 
- 
-Hier wird der C-Compiler erkannt (GCC 12.1.0), ein paar Compilerfeatures probiert und am Ende das Projekt konfiguriert und ein Makefile generiert. Das build-Verzeichnis sieht nun so aus: 
- 
-  $ ls 
-  🗋 cmake_install.cmake ​ 🗋 CMakeCache.txt ​ 🗁 CMakeFiles ​ 🗋 Makefile 
- 
-Nun führen wir das Makefile normal aus, womit das Projekt übersetzt und gelinkt wird, und wir erhalten eine ''​hello_world''​ Executable. 
- 
-==== Die CMakeLists verstehen ==== 
- 
-Die obige ''​CMakeLists.txt''​ beinhaltet drei Kommandos: 
- 
-<code cmake> 
-cmake_minimum_required(VERSION 3.10) 
-</​code>​ 
- 
-Dies gibt die minimale Version von CMake an, mit der dieses CMakefile benutzt werden kann. Das wird vor allem dann interessant,​ wenn Features aktuellerer CMake-Versionen gebraucht werden. Es bietet sich für persönliche Projekte an, einfach die Version des installierten CMakes zu verwenden, für Projekte mit anderen Entwickler\*innen,​ sollte sich auf die minimal vorhandene Version über die vorhandenen Linux-Systeme hinweg geeinigt werden. Damit sind aber auch einige der aktuelleren Features ausgeschlossen,​ weil die mit einem älteren CMake nicht funktionieren. 
- 
-<code cmake> 
-project(HelloWorld) 
-</​code>​ 
- 
-Diese Zeile gibt dem Projekt einen beliebigen Projektnamen. 
- 
-<code cmake> 
-add_executable(hello_world main.c) 
-</​code>​ 
- 
-Mit ''​add_executable''​ teilen wir CMake mit, dass wir eine ausführbare Datei erstellen wollen. Die hier nennen wir ''​hello_world''​ und sie wird aus der ''​main.c''​ erstellt. CMake weiß bereits, wie es aus einzelnen C-Dateien Programme erstellen kann, sodass es ausreicht CMake die benötigten Dateien mitzuteilen. 
- 
-Dieses CMake-Projekt ist nicht sonderlich spannend, aber CMake kann noch ziemlich nützlich werden.