Ersetzt das Geruest (counter/notebook) durch ein echtes Beispiel und teilt es in zwei eigenstaendige Projekte, wie P1204R0 es fuer Bibliothek plus Programm verlangt. libpda: textfile (C, Datei-I/O und Feld-Escaping), calculator (Recursive-Descent-Parser mit std::expected), contact, editor, explorer. Exportiert pda::pda ueber install(EXPORT) und ist per find_package(pda) benutzbar. pda: Shell ohne Ein-/Ausgabe (execute() gibt Text zurueck, deshalb ohne Terminal testbar), REPL und Stapelbetrieb in main.cpp. examples/consumer und tools/check-install.sh pruefen die Export-Kette Ende-zu-Ende: installieren, dann ein fremdes Projekt dagegen bauen. docs/CMAKE.md erklaert das Target-Modell, PUBLIC/PRIVATE/INTERFACE, Generator-Ausdruecke, install/export und Symbolsichtbarkeit an diesem Projekt. 71 Tests gruen unter Homebrew-clang 22, Apple clang und GCC 16, statisch und shared, mit und ohne ASan/UBSan. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1.7 KiB
ADR 0001 — Toolchain und Projektstruktur
- Status: akzeptiert
- Datum: 2026-08-30
Kontext
playground soll ein Ort zum Ausprobieren sein, aber kein Ort, an dem jedes
Mal neu über Verzeichnisnamen, Include-Form und Testablage entschieden wird.
Die bestehenden Projekte mydb und cxx_scaffold_cli haben diese Fragen
bereits beantwortet.
Entscheidung
Struktur nach P1204R0, Build- und Stilkonfiguration von mydb übernommen
(.clang-format, .clang-tidy, .clangd, .editorconfig,
CMakePresets.json, cmake/), Makro- und Target-Präfix auf PDA_/pda_
umgestellt.
Zwei Abweichungen vom Hausstandard, beide in 0002
begründet: die Aufteilung in zwei Projekte und das daraus folgende
cmake/ProjectDefaults.cmake, das die Grundeinstellungen aus dem
CMakeLists.txt herauszieht, damit beide Teilprojekte sie teilen können.
Die vendorten Abhängigkeiten (Unity 2.7.0, doctest 2.5.3) wurden aus
mydb/third_party/ kopiert statt neu geholt — damit sind die Versionen über
alle Projekte hinweg identisch.
Konsequenzen
Ein Wechsel zwischen den Projekten kostet keine Umgewöhnung, und ein hier erprobtes Modul lässt sich unverändert in ein anderes Projekt heben.
Der Preis ist Duplikation: eine Änderung am Hausstandard muss in jedem Repo
einzeln nachgezogen werden. Das war schon vor diesem Repo so; cxx_scaffold_cli
ist der Ort, an dem eine gemeinsame Vorlage entstehen müsste.
Offen bleibt, dass docs/CONVENTIONS.md in mydb ein check_style.sh und ein
tools/vendor.sh beschreibt, die in keinem der Repos existieren. In der
playground-Fassung sind diese Verweise entfernt; tools/ enthält hier
stattdessen check-install.sh, das tatsächlich existiert und läuft.