clangd pfade hinzufügen für autocomplete

Gast #7347427

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 :)

#7347951

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

Gast #7350664

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" } ],

Gast #7351695

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.

Gast #7352676

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
#7352748

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
       ]
#7352849

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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.