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:
+58
-8
@@ -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
|
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
|
`add_library()` geht — dann ist das Modell korrekt und der Fehler liegt bei
|
||||||
laden: **File → Reload CMake Project**.
|
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
|
### 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
|
`clang` danach nie wieder auf. Es gibt keine Fehlermeldung, nur einen anderen
|
||||||
Compiler als gedacht.
|
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:
|
Zwei saubere Auswege:
|
||||||
|
|
||||||
1. **CLion ein eigenes Build-Verzeichnis geben** (Default `cmake-build-debug`,
|
1. **CLion ein eigenes Build-Verzeichnis geben** (Default `cmake-build-debug`,
|
||||||
in `.gitignore` eingetragen). Terminal und IDE kommen sich nie in die Quere.
|
in `.gitignore` eingetragen) und die Preset-Profile unter *Settings →
|
||||||
2. **Denselben Compiler erzwingen:** in CLion unter *Settings → Build,
|
Build, Execution, Deployment → CMake* **loeschen**, nicht nur deaktivieren.
|
||||||
Execution, Deployment → Toolchains* C/C++-Compiler auf
|
2. **Denselben Compiler erzwingen:** unter *Settings → Build, Execution,
|
||||||
`/opt/homebrew/opt/llvm/bin/clang` bzw. `clang++` setzen.
|
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
|
Am besten beides: eigenes Verzeichnis **und** derselbe Compiler. Dann sieht die
|
||||||
dieselben Diagnosen wie im Terminal.
|
IDE dieselben Diagnosen wie das Terminal, ohne sich mit ihm zu schlagen.
|
||||||
|
|
||||||
## 14. Werkzeuge zum Nachsehen
|
## 14. Werkzeuge zum Nachsehen
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user