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 <noreply@anthropic.com>
This commit is contained in:
2026-08-30 18:47:34 +02:00
parent 2c21df4be0
commit 5efc5fccff
+58 -8
View File
@@ -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/<preset>`.
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