Skip to content

Commit ea5a1c6

Browse files
Adding Makefile for CI/CD Execution
1 parent 696b874 commit ea5a1c6

2 files changed

Lines changed: 134 additions & 1 deletion

File tree

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ CMakeCache.txt
1919
CMakeFiles/
2020
cmake_install.cmake
2121
install_manifest.txt
22-
Makefile
2322
# CMake User Presets (lokale Pfade, nicht ins Repo!)
2423
CMakeUserPresets.json
2524

Makefile

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
BINARY_NAME = MyProject
2+
BUILD_DIR = build
3+
4+
# Compiler explizit auf Clang setzen (da du Clang magst)
5+
CXX = clang++
6+
CC = clang
7+
8+
# Standard-Build-Typ (Debug ist besser zum Entwickeln wegen Sanitizers)
9+
BUILD_TYPE ?= Debug
10+
11+
# .PHONY sagt Make, dass diese Ziele keine echten Dateinamen sind
12+
.PHONY: all build configure run test clean help format
13+
14+
# --- Targets ---
15+
16+
# Standard: Wenn du nur 'make' tippst, wird alles konfiguriert und gebaut
17+
all: build
18+
19+
# Konfiguriert das Projekt mit CMake (erstellt den build-Ordner)
20+
# Wir prüfen, ob Makefile im build-Ordner existiert, um nicht unnötig neu zu konfigurieren
21+
$(BUILD_DIR)/Makefile:
22+
cmake -S . -B $(BUILD_DIR) \
23+
-DCMAKE_CXX_COMPILER=$(CXX) \
24+
-DCMAKE_C_COMPILER=$(CC) \
25+
-DCMAKE_BUILD_TYPE=$(BUILD_TYPE)
26+
27+
# Zwingt eine Neukonfiguration (nützlich, wenn du neue Dateien hinzugefügt hast)
28+
reconfig:
29+
cmake -S . -B $(BUILD_DIR) \
30+
-DCMAKE_CXX_COMPILER=$(CXX) \
31+
-DCMAKE_C_COMPILER=$(CC) \
32+
-DCMAKE_BUILD_TYPE=$(BUILD_TYPE)
33+
34+
# Baut das Projekt
35+
build: $(BUILD_DIR)/Makefile
36+
cmake --build $(BUILD_DIR) -- -j$(shell nproc)
37+
38+
# Führt das Programm aus
39+
run: build
40+
./$(BUILD_DIR)/$(BINARY_NAME)
41+
42+
# Führt die Tests aus (mit ctest)
43+
test: build
44+
cd $(BUILD_DIR) && ctest --output-on-failure
45+
46+
# Löscht den Build-Ordner (zum Aufräumen)
47+
clean:
48+
rm -rf $(BUILD_DIR)
49+
50+
# Formatiert den Code (falls clang-format installiert ist)
51+
format:
52+
find src -name '*.cpp' -o -name '*.hpp' | xargs clang-format -i
53+
54+
# Zeigt Hilfe an
55+
help:
56+
@echo "Verfügbare Befehle:"
57+
@echo " make -> Konfigurieren und Bauen (Default)"
58+
@echo " make run -> Bauen und Programm starten"
59+
@echo " make test -> Bauen und Unit-Tests laufen lassen"
60+
@echo " make clean -> Build-Ordner löschen"
61+
@echo " make format -> Code automatisch formatieren (clang-format)"
62+
63+
# --- Coverage Target (Nur für Clang) ---
64+
# --- LCOV Coverage Target (Ideal für IDEs und CI) ---
65+
coverage:
66+
@echo "1. Konfiguriere mit Coverage..."
67+
cmake -S . -B $(BUILD_DIR) \
68+
-DCMAKE_CXX_COMPILER=$(CXX) \
69+
-DCMAKE_BUILD_TYPE=Debug \
70+
-DENABLE_COVERAGE=ON
71+
72+
@echo "2. Baue Tests..."
73+
cmake --build $(BUILD_DIR) --target unit_tests -- -j$(shell nproc)
74+
75+
@echo "3. Führe Tests aus..."
76+
LLVM_PROFILE_FILE="$(BUILD_DIR)/tests.profraw" ./$(BUILD_DIR)/unit_tests
77+
78+
@echo "4. Verarbeite Daten..."
79+
llvm-profdata merge -sparse $(BUILD_DIR)/tests.profraw -o $(BUILD_DIR)/coverage.profdata
80+
81+
@echo "5. Exportiere zu LCOV..."
82+
# WICHTIG: Ausgabe wird nach build/coverage.info umgeleitet
83+
llvm-cov export ./$(BUILD_DIR)/unit_tests \
84+
-instr-profile=$(BUILD_DIR)/coverage.profdata \
85+
-format=lcov \
86+
src/cpp \
87+
> $(BUILD_DIR)/coverage.lcov
88+
89+
@echo "6. Aufräumen..."
90+
rm $(BUILD_DIR)/tests.profraw $(BUILD_DIR)/coverage.profdata
91+
92+
@echo "Fertig! Datei liegt unter '$(BUILD_DIR)/coverage.info'."
93+
94+
# --- Security Scan ---
95+
# Voraussetzung: 'snyk' CLI ist installiert und eingeloggt
96+
security-check:
97+
@echo "Stelle sicher, dass Dependencies heruntergeladen sind..."
98+
@# Wir triggern cmake kurz, falls build/_deps leer ist
99+
cmake -S . -B $(BUILD_DIR)
100+
101+
@echo "Starte Snyk Vulnerability Scan..."
102+
# Wir scannen rekursiv den _deps Ordner
103+
snyk test --unmanaged $(BUILD_DIR)/_deps
104+
105+
# --- Code Quality & Security Targets ---
106+
107+
# Linting ohne Bauen (nur Prüfung)
108+
lint:
109+
@echo "Starte Clang-Tidy (Strict Mode)..."
110+
find src -name '*.cpp' | xargs clang-tidy -p $(BUILD_DIR) \
111+
-header-filter="^$(shell pwd)/src/.*" \
112+
--warnings-as-errors='*' \
113+
--quiet
114+
115+
# Statische Analyse (Cppcheck)
116+
analyze:
117+
@echo "Starte Cppcheck (Deep Analysis)..."
118+
cppcheck --enable=all --inconclusive --std=c++20 \
119+
--suppress=missingIncludeSystem \
120+
-I src/include src/cpp/
121+
122+
# Security Scan (Flawfinder)
123+
security-code:
124+
@echo "Suche nach Sicherheitslücken im Code (CWE)..."
125+
# Level 1 ist strikt, m ist min_level
126+
flawfinder --minlevel=1 --context src/
127+
128+
# Prüft, ob der Code formatiert ist (Gibt Fehler zurück, wenn nicht)
129+
check-format:
130+
@echo "Prüfe Code-Formatierung..."
131+
@# --dry-run: Ändert nichts
132+
@# --Werror: Gibt Fehler zurück, wenn Formatierung nötig wäre
133+
find src -name '*.cpp' -o -name '*.hpp' | xargs clang-format --dry-run --Werror
134+

0 commit comments

Comments
 (0)