diff --git a/Lerntagebuch/Woche_10.md b/Lerntagebuch/Woche_10.md new file mode 100644 index 0000000000000000000000000000000000000000..81dd918ca61a72da3c4826656983f3aaee194d54 --- /dev/null +++ b/Lerntagebuch/Woche_10.md @@ -0,0 +1,68 @@ + +# 📖 Lerntagebuch - Woche 10 + +| Tool | Funktion | +|------|----------| +| **GCC** | Compiler für C, C++ und andere Sprachen | +| **Make** | Automatisiert den Build-Prozess über ein Makefile | +| **CMake** | Generiert plattformübergreifende Build-Skripte für Make oder Ninja | +| **Ninja** | Hochperformantes Build-Tool für schnelle inkrementelle Builds | + +### **Praktische Übung: Implementierung eines Build-Systems** +Ich habe ein C-Projekt zur Berechnung der Hypotenuse mit den folgenden Methoden kompiliert: +1. **Manuelle Kompilierung mit GCC** + + +- Ein Nachteil der Kompilierung mit GCC ist, dass man sich immer an die richtigen Kompilierungsflags erinnern muss. Wenn das Projekt aus mehreren Dateien besteht, kann es umständlich sein, alle Dateien manuell anzugeben, da man nichts vergessen darf. + +- Ein weiterer Nachteil ist, dass GCC keine automatische Abhängigkeitsverwaltung bietet – wenn sich eine Header-Datei ändert, muss man alles neu kompilieren, was ineffizient sein kann, besonders bei großen Projekten. + +2. **Verwendung von Make** + +- Ein großer Vorteil von Makefiles ist, dass man das ganze Projekt mit nur einem einzigen Befehl (make) bauen kann, ohne sich um einzelne Kompilierungsbefehle kümmern zu müssen. + +- Ein weiterer Vorteil ist, dass die Build-Schritte automatisch im Hintergrund ausgeführt werden, aber gleichzeitig alle ausgeführten Kommandos in der Konsole sichtbar sind. Das ist besonders praktisch zur Fehlersuche, da man sofort sieht, welche Befehle Make ausgeführt hat und wo eventuell ein Problem liegt. + +*Hinweis:* Beim Kopieren des Makefiles wurde die Tabulatorstruktur in der Build-Regel verschoben, was zu einem Fehler führte. Ich musste die Einrückung korrigieren, damit die Makefile-Regeln korrekt erkannt wurden. + +3. **Verwendung von CMake** +Bei der Verwendung von CMake trat ein Fehler auf: + +```bash +Nikolay@Lxrd-xf-Lxneliness MINGW64 ~/Desktop/HS Fulda/1. Sem/Prog 1/woche_10/build +$ cmake .. +-- Building for: NMake Makefiles +CMake Error at CMakeLists.txt:4 (project): + Running + + 'nmake' '-?' + + failed with: + + no such file or directory + + +CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage +-- Configuring incomplete, errors occurred! +``` +Dies geschah, **weil CMake keinen passenden C-Compiler gefunden hat und versuchte, NMake zu verwenden, das nicht installiert war**. + +***Lösung*:** +Ich habe den richtigen Compiler in der MinGW-Umgebung angegeben, indem ich das folgende Kommando ausführte: + + + + +4. **Verwendung von Ninja** + + + +### **Was war schwierig?** +- **Unterschiede zwischen Make und CMake**: CMake benötigt zusätzliche Schritte zur Konfiguration. +- **Pfadprobleme** beim Erstellen von Out-of-Source-Builds mit CMake. +- **Fehlende Abhängigkeiten**: Ich musste `cmake` und `ninja` installieren. + +### **Reflexion** +- **Make ist einfach, aber unflexibel** für große Projekte. +- **CMake erleichtert plattformübergreifende Entwicklung**. +- **Ninja ist extrem schnell** und effizient für inkrementelle Builds.