VS-Code "includepath" findet eigene Header-dateien nicht.



  • Guten Morgen.
    Ich habe schon alles probiert und sämtliche foren durchsucht, aber ich bekomm es nicht hin, dass
    VS-Code meine eigenen Header annimmt.
    Ich habe einen Projektordner in dem ich meine main.cpp habe. In diesem Ordner befindet sich ein Ordner "include" in dem ich meinen header habe. In der c_cpp_properties.json habe ich auch unter "includepath" diesen ordner angegeben, aber wenn ich kompiliere, bekomme ich dennoch den Fehler, dass diese Datei nicht gefunden wird.
    In der main.cpp füge ich den Header so ein:

    #include "test.h"
    

    Das funktioniert nicht.
    Füge ich allerdings so ein:

    #include "include/test.h"
    

    Fuktioniert alles.

    Aber wenn ich doch den "includepath" angebe, sollte sich die zusätzliche Pfadangabe in der #includeanweisung doch erübrigen, oder nicht.
    hier ist meine c_cpp_prpoerties.json:

    {
        "configurations": [
            {
                "name": "Win32",
                "includePath": [
                    "${workspaceFolder}",
                    "C:/Users/ich/Documents/VS_Code/C++/Projekte/Test/include/**",
                    "C:/Users/ich/Documents/VS_Code/C++/Projekte/Test/include",
                    "${workspaceFolder}/include"
                ],
                "defines": [
                    "_DEBUG",
                    "UNICODE",
                    "_UNICODE"
                ],
                "windowsSdkVersion": "10.0.18362.0",
                "compilerPath": "C:/MinGW/bin/g++.exe",
                "cStandard": "c11",
                "cppStandard": "c++17",
                "intelliSenseMode": "${default}",
                "browse": {
                    "path": [
                        "/include"
                    ]
                }
            }
        ],
        "version": 4
    }
    

    Ihr seht, ich habe sämtliche ordner mit eingefügt, weil ich so ziemlich alles probiert, aber ohne Pfadangabe in der #includeanweisung bekomme ich es nicht zum laufen.

    Hier nochmal die main.cpp

    //#include "test.h"  <-- Fehler
    //#include <test.h>  <-- Fehler
    #include "include/test.h"  //<-- Funktioniert 
    
    int main()
    {
        cout << "Name eingeben: ";
        string name;
        cin >> name;
        ausgabe(name);
        return 0;
    }
    
    

    ps.: Hier fehlen natürlich <iostream> und <string> aber die sind in der "test.h" zu finden.

    Ich hoffe ihr könnt mir helfen.
    Vielen Dank.



  • Lösche mal "browse": { "path" ... }, s.a. c_cpp_properties.json reference:

    path A list of paths for the Tag Parser to search for headers included by your source files. If omitted, includePath will be used as the path. Searching on these paths is recursive by default. Specify * to indicate non-recursive search. For example: /usr/include will search through all subdirectories while /usr/include/* will not.



  • Hab ich gemacht, aber dennoch funktioniert es nicht. Hat sich nichts geändert.

    {
        "configurations": [
            {
                "name": "Win32",
                "includePath": [
                    "${workspaceFolder}",
                    "C:/Users/ich/Documents/VS_Code/C++/Projekte/Test/include/**",
                    "C:/Users/ich/Documents/VS_Code/C++/Projekte/Test/include",
                    "${workspaceFolder}/include"
                ],
                "defines": [
                    "_DEBUG",
                    "UNICODE",
                    "_UNICODE"
                ],
                "windowsSdkVersion": "10.0.18362.0",
                "compilerPath": "C:/MinGW/bin/g++.exe",
                "cStandard": "c11",
                "cppStandard": "c++17",
                "intelliSenseMode": "${default}"
            }
        ],
        "version": 4
    }
    


  • Probiere mal als einzigen "includePath":

    "${workspaceFolder}/**"
    

    (evtl. noch Projekt danach neu laden)



  • Auch das funktioniert nicht.
    Es ist zum irre werden.
    mir bleibt nichts andere übrig, als der includeanweisung den ordner voranzustellen.
    also:

    #include "include/test.h"
    

    statt:

    #include "test.h"
    

    das ist zwar erstmal nicht weiter schlimm, nervt aber.

    Was ich nur ser komisch finde ist, dass die c_cpp_properties diesen Ordner findet, bzw. kennt.
    Wenn man dort einen Pfad eingibt, wird er interaktiv gecheckt. Schreibe ich den Verzeichnisnamen falsch, erscheint direkt eine gelbe Linie mit dem Hinweis, dass der Ordner nicht vorhanden ist. Somit erkennt er den include-Ordner, berücksichtig ihn aber anscheinend nicht.



  • @robert123 sagte in VS-Code "includepath" findet eigene Header-dateien nicht.:

    Auch das funktioniert nicht.

    Und welche Fehlermeldung gibt der Compiler aus?



  • Nur das.

    > Executing task in folder Test: C:/MinGW/bin/g++.exe -g c:\Users\ich\Documents\VS_Code\C++\Projekte\Test\main.cpp -o c:\Users\ich\Documents\VS_Code\C++\Projekte\Test/bin/main.exe <
    
    c:\Users\ich\Documents\VS_Code\C++\Projekte\Test\main.cpp:1:10: fatal error: test.h: No such file or directory
        1 | #include "test.h"
          |          ^~~~~~~~
    compilation terminated.
    Der Terminalprozess wurde mit folgendem Exitcode beendet: 1
    


  • @robert123 wie man sieht wird dem Compiler kein -I für den Includepfad mitgegeben. Die Angabe eines Pfades in der Konfiguration scheint also nicht zu reichen. Auch die Defines sind nicht zu sehen!



  • Da scheint aber etwas anderes noch nicht richtig konfiguriert zu sein, da ja - außer "-g" - überhaupt kein Pfad (bzw. andere Optionen wie die "defines") an die g++.exe übergeben werden.

    Die c_cpp_properties.json-Datei ist wohl nur für den Code-Editor bzgl. Intellisense etc. (s. C/C++ for VS Code (Preview) sowie Using GCC with MinGW).
    Du mußt wohl direkt in der tasks.json die Compiler-Optionen bei "args" hinzufügen:

    -I${workspaceFolder}/include -D_DEBUG -DUNICODE -D_UNICODE -std=c++17
    

    PS: Es gibt wohl auch noch die Möglichkeit, Standard-Einstellungen vorzunehmen (um sie für mehrere Projekte bzw. Unterordner zu nutzen): Customizing default settings.



  • ja, habs gerade nachgeholt. jetzt läuft es.
    Nur komisch dass das nirgendwo erwähnt wird, oder ich habe es einfach übersehen.
    Ich danke euch vielmals.


Anmelden zum Antworten