Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
build:cmake:create-project [2011/04/14 22:37]
kerli angelegt
build:cmake:create-project [2022/09/22 19:58] (aktuell)
Zeile 1: Zeile 1:
 ====== Ein Projekt anlegen ====== ====== 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:
  
-Um CMake zu ermöglichen unser Projekt zu bauen müssen wir beschreiben wie unser Projekt überhaupt gebaut werden mussDazu 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 kann diese Datei zum Beispiel so ausschauen:+<code cmake> 
 +cmake_minimum_required(VERSION 3.10)
  
-<​code>​ 
-# Das ist ein Kommentar 
-# für das tolle Hello World Projekt 
 project(HelloWorld) project(HelloWorld)
  
-add_executable(hello_world main.cpp)+add_executable(hello_world main.c)
 </​code>​ </​code>​
  
-Anschließend können wir über die Konsole oder auch die GUI von CMake ein Projekt ​für die gewünschte Entwicklungsumgebung erstellen lassen und danach auch gleich ​bauen.+===== Das Projekt bauen =====
  
-===== Quelldateien angeben =====+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:
  
-FIXME 
 <​code>​ <​code>​
-file(GLOB C_FILES ​  "​*.cpp") +-- The C compiler identification is GNU 12.1.0 
-file(GLOB H_FILES "../../include/foo/*.h")+-- The CXX compiler identification is GNU 12.1.
 +-- 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>​ </​code>​
  
-===== Bibliotheken finden ​und linken =====+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:
  
-FIXME +  $ ls 
-<​code>​ +  🗋 cmake_install.cmake ​ 🗋 CMakeCache.txt ​ 🗁 CMakeFiles ​ 🗋 Makefile 
-find_package(Qt4 REQUIRED)+ 
 +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>​ </​code>​
  
-<​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. 
-target_link_libraries(foo ${QT_LIBRARIES})+ 
 +<​code ​cmake
 +project(HelloWorld)
 </​code>​ </​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.