From 5efc5fccffc98e83defb5f7a22e18b741bd45120 Mon Sep 17 00:00:00 2001 From: paulhorn Date: Sun, 30 Aug 2026 18:47:34 +0200 Subject: [PATCH] docs: CLion-Abschnitt um die tatsaechliche Loesungsreihenfolge ergaenzen Der Einzeldatei-Modus (CppFileRunConfiguration) war der zaeheste Teil: er uebersetzt ohne -I und -std und sieht wie ein Projektfehler aus. Ausserdem als beobachtete Tatsache statt Theorie: CLions 'Reset Cache and Reload Project' hat die CMakeCache.txt in build/debug geloescht, weil die angelegten Preset-Profile dorthin zeigen -- auch deaktiviert. ctest lief danach weiter, nur cmake --build brach ab. Co-Authored-By: Claude Opus 5 --- docs/CMAKE.md | 66 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/docs/CMAKE.md b/docs/CMAKE.md index dcab068..e46c936 100644 --- a/docs/CMAKE.md +++ b/docs/CMAKE.md @@ -508,8 +508,34 @@ print(*[s['path'] for s in d['sources']], sep='\n')" ``` Stehen die Header dort — und sie stehen dort, weil `LIBPDA_HEADERS` an -`add_library()` geht — dann ist das Modell korrekt und CLion muss nur neu -laden: **File → Reload CMake Project**. +`add_library()` geht — dann ist das Modell korrekt und der Fehler liegt bei +CLion. + +### Die Reihenfolge, die tatsächlich hilft + +Beim ersten Einrichten dieses Projekts war es genau diese: + +1. **Projekt über die `CMakeLists.txt` öffnen**, nicht über den Ordner + (*File → Open…* → die Datei im Wurzelverzeichnis wählen → „Open as + Project"). Ein als Ordner geöffnetes Projekt bekommt kein CMake-Modell, + und CLion bietet stattdessen den **Einzeldatei-Modus** an. +2. **Toolchain setzen** (siehe unten), dann *Tools → CMake → Reset Cache and + Reload Project* — in der **Menüleiste**, nicht in den Einstellungen. +3. **Die Einzeldatei-Konfiguration löschen**: *Run → Edit Configurations…* → + unter „C/C++ File" den Eintrag mit dem Dateinamen → **−**. + +Schritt 3 ist der, den man am ehesten übersieht. Diese Konfiguration +(`CppFileRunConfiguration`) uebersetzt eine einzelne Datei **ohne jede +Projekteinstellung**: + +``` +clang++ .../pda/pda/main.cpp -o main # kein -I, kein -std +``` + +Solange sie oben rechts ausgewählt ist, scheitert jeder Lauf an +`'libpda/details/version.hpp' file not found` — obwohl das Projekt völlig in +Ordnung ist. Danach steht in derselben Liste `pda_app`, `calculator.test`, +`integration_basics` und so weiter. ### Die Falle: zwei Compiler, ein Build-Verzeichnis @@ -523,16 +549,40 @@ zuerst konfiguriert — CMake speichert den **vollen Pfad** im Cache und löst `clang` danach nie wieder auf. Es gibt keine Fehlermeldung, nur einen anderen Compiler als gedacht. +Und es bleibt nicht bei einem anderen Compiler. Beim Einrichten hier hat +CLions *Reset Cache and Reload Project* die **`CMakeCache.txt` im +Terminal-Build-Verzeichnis geloescht** -- `build/debug` behielt `build.ninja`, +`compile_commands.json` und alle Binaries, nur der Cache war weg: + +``` +$ cmake --build --preset debug +Error: not a CMake build directory (missing CMakeCache.txt) +``` + +Kurios dabei: `ctest --preset debug` lief weiter durch, weil +`CTestTestfile.cmake` und die gebauten Testprogramme noch dalagen. Der Schaden +faellt also erst beim naechsten Bauen auf. Behoben mit einem einfachen +`cmake --preset debug`. + +Ausgeloest hat das ein **deaktiviertes** Preset-Profil -- CLion legt beim Laden +fuer jeden Preset eines an (hier zehn, teils doppelt als `debug` und +`debug - debug`), und deren `GENERATION_DIR` zeigt auf `build/`. + Zwei saubere Auswege: 1. **CLion ein eigenes Build-Verzeichnis geben** (Default `cmake-build-debug`, - in `.gitignore` eingetragen). Terminal und IDE kommen sich nie in die Quere. -2. **Denselben Compiler erzwingen:** in CLion unter *Settings → Build, - Execution, Deployment → Toolchains* C/C++-Compiler auf - `/opt/homebrew/opt/llvm/bin/clang` bzw. `clang++` setzen. + in `.gitignore` eingetragen) und die Preset-Profile unter *Settings → + Build, Execution, Deployment → CMake* **loeschen**, nicht nur deaktivieren. +2. **Denselben Compiler erzwingen:** unter *Settings → Build, Execution, + Deployment → Toolchains* C/C++-Compiler auf + `/opt/homebrew/opt/llvm/bin/clang` bzw. `clang++` setzen. Die Toolchain muss + dabei **ganz oben** in der Liste stehen (fett = Standard), sonst benutzt das + CMake-Profil weiter die alte. Danach ist ein Cache-Reset Pflicht -- CMake + verweigert den Compilerwechsel sonst: + `You have changed variables that require your cache to be deleted.` -Weg 1 ist der bequemere, Weg 2 der ehrlichere -- dann sieht clangd in CLion -dieselben Diagnosen wie im Terminal. +Am besten beides: eigenes Verzeichnis **und** derselbe Compiler. Dann sieht die +IDE dieselben Diagnosen wie das Terminal, ohne sich mit ihm zu schlagen. ## 14. Werkzeuge zum Nachsehen