Hallo guten Tag, ich nutze clangd in Visual Studio Code. (Aber ich compiliere mit avr-gcc.) Man kann den Sprache-Server verwenden, damit man Code-Vervollständigungen erhält. Allerdings ist bei mir u.a. rot unterstrichen: #include <avr/interrupt.h> #include <avr/io.h> Wenn man mit der Maus drüber geht steht im Pop up u.a. 'avr/interrupt.h' file not foundclang(pp_file_not_found) Jetzt habe ich versucht zu verstehen wie man neue Pfade hinzufügen kann aber noch keine Lösung gefunden.. Hat jemand eine Idee? Danke sehr :)
clangd sucht nach einer Datei namens compile_commands.json, in der für jede Datei die Compiler-Kommandzeile hinterlegt ist, mit der sie übersetzt wird. Daraus zieht er dann auch die Include-Pfade, Warnungs-Einstellung u.s.w. Wenn man z.B. mit cmake baut, kann einem das automatisch diese Datei erzeugen. Alternativ gibt's noch die Datei .clangd (bzw. muss angelegt werden), in der man auch projektspezifische Dinge wie Include-Pfade hinterlegen kann. Siehe https://clangd.llvm.org/config#compileflags
:
Bearbeitet durch User
die Fehlermeldung "file not found" deutet darauf hin, dass der Sprach-Server die Header-Datei nicht finden kann. Um dies zu beheben, musst du Ihrem Build-System (in Ihrem Fall avr-gcc) mitteilen, wo sich die Header-Dateien befinden. Sie können dies tun, indem du das Verzeichnis, das die Header-Dateien enthält, als Include-Verzeichnis angeben. In der Regel wird dies durch die Verwendung der -I-Option in Ihrem Build-System erreicht. In Visual Studio Code kannst du das Include-Verzeichnis auch in der "c_cpp_properties.json"-Datei definieren, die sich im .vscode-Ordner befindet. Füge einfach das Verzeichnis, das die Header-Dateien enthält, zur "includePath"-Eigenschaft hinzu. Beispiel: "configurations": [ { "name": "My Configuration", "includePath": [ "${workspaceFolder}/**", "/pfad/zum/include/verzeichnis" ], "defines": [], "compilerPath": "/pfad/zum/compiler", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "clang-x64" } ],
Dgi schrieb: > In Visual Studio Code kannst du das Include-Verzeichnis auch in der > "c_cpp_properties.json"-Datei definieren, die sich im .vscode-Ordner > befindet. Füge einfach das Verzeichnis, das die Header-Dateien enthält, > zur "includePath"-Eigenschaft hinzu. Igendwie geht das immer noch nicht. Ich weiß auch gar nicht was mti "name": "linux-gcc-x64", gemeint ist. Den benutz ich doch gar nicht.. Ich werde dort mal avr-gcc eintragen?
1 | {
|
2 | "configurations": [ |
3 | {
|
4 | "name": "linux-gcc-x64", |
5 | "includePath": [ |
6 | "${workspaceFolder}/**", |
7 | "/usr/lib/avr/include/avr/", |
8 | "/usr/lib/avr/include", |
9 | "/usr/lib/avr"
|
10 | ],
|
11 | "compilerPath": "/usr/bin/avr-gcc", |
12 | "cStandard": "${default}", |
13 | "cppStandard": "${default}", |
14 | "intelliSenseMode": "linux-gcc-x64", |
15 | "compilerArgs": [ |
16 | ""
|
17 | ]
|
18 | }
|
19 | ],
|
20 | "version": 4 |
21 | }
|
Und meinem Buidl System habe ich auch noch make avr-gcc -g -Wall -mcall-prologues -mmcu=atmega328p -Os -I /usr/lib/avr/include/avr/ -c -o main.o main.c mittgeteilt... Aber irgendwie fehlt da der Übergang zu clangd.. Habe auch mal eine .clangd - Datei angelegt.. mit : /usr/lib/avr/include/avr/ Aber das ändert nichts.
säurehaltigerStein schrieb: > Habe auch mal eine .clangd - Datei angelegt.. > mit : /usr/lib/avr/include/avr/ Ist das alles, was in der Datei steht? Die muss eine YAML-Datei sein in dem Format, wie in der Doku beschrieben.
:
Bearbeitet durch User
Rolf M. schrieb: > Format, wie in der Doku https://clangd.llvm.org/config#pathmatch Ich kann die Beschreibung zu den Pfaden nicht finden. Habe folgendes verwendet, aber ich verstehe nicht und funktioniert auch nicht: user configuration: a config.yaml file in an OS-specific directory: Linux and others: $XDG_CONFIG_HOME/clangd/config.yaml, typically ~/.config/clangd/config.yaml In meiner yaml Datei.. /home/oem/.config/clangd/config.yaml
1 | ---
|
2 | IncludePaths: |
3 | - /path/to/avr/io.h |
4 | - /usr/lib/avr/include/avr/io.h |
5 | - /usr/lib/avr/include/avr/ |
6 | - /usr/lib/avr |
veganerBauer schrieb: > user configuration: a config.yaml file in an OS-specific directory: > Linux and others: $XDG_CONFIG_HOME/clangd/config.yaml, typically > ~/.config/clangd/config.yaml Du kannst sie entweder dort ablegen (hab ich jetzt nicht ausprobiert) oder im Wurzelverzeichnis deines Projekts als .clangd Letzteres hat dann den Vorteil, dass du für jedes Projekt eine eigene Config erstellen kannst. > IncludePaths: So etwas kann ich auf dieser Webseite nicht finden. Ich meinte entsprechend diesem Beispiel:
1 | CompileFlags: # Tweak the parse settings |
2 | Add: [-xc++, -Wall] # treat all files as C++, enable more warnings |
3 | Remove: -W* # strip all other warning-related flags |
4 | Compiler: clang++ # Change argv[0] of compile flags to `clang++` |
Und da kannst du bei Add die nötigen Compiler-Argumente angeben, darunter dann auch die Include-Verzeichnisse mit -Iverzeichns, entsprechend dem Kommandozeilenparameter für den Compiler. Remove: und Compiler: kannst du weglassen. Also in deinem Fall z.B.
1 | CompileFlags: |
2 | Add: [ -I/path/to/avr/io.h, |
3 | -I/usr/lib/avr/include/avr/io.h, |
4 | -I/usr/lib/avr/include/avr/, |
5 | -I/usr/lib/avr |
6 | ] |
:
Bearbeitet durch User
säurehaltigerStein schrieb: > Dgi schrieb: >> In Visual Studio Code kannst du das Include-Verzeichnis auch in der >> "c_cpp_properties.json"-Datei definieren, die sich im .vscode-Ordner Das war schon nicht verkehrt was chatgpt da gebrabbelt hat. Es geht aber bequemer mit cmake und der cmake Extension, dann kann man sich die includes und defines sparen. Cmake wird dann als configurationProvider angegeben. > Igendwie geht das immer noch nicht. > Ich weiß auch gar nicht was mti "name": "linux-gcc-x64", gemeint ist. > Den benutz ich doch gar nicht.. > Ich werde dort mal avr-gcc name ist beliebig und benennt nur die Intellisense Config die rechts unten im Status angezeigt wird. https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference Über den config provider bekommt intellisense dann auch den Compiler und die System includes mit. Durch den Cache sind die Änderungen aber nicht immer sofort wirksam.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.