[CodeBlocks] Frage zu Einbindung von Library unter Linux



  • Hi, ich habe ein Problem eine Library unter Linux in CodeBlocks einzubinden. Und zwar geht es um die Header Dateien. Im Moment mache ich das so:

    Settings -> Compiler and debugger... -> Search directories
    

    Da trage ich dann den Pfad ein, zB:

    usr/local/include
    

    Das Problem ist jetzt aber, dass die Includedateien meiner Bibliothek in vielen Ordnern liegen. Das ganze sieht ungefähr so aus

    -Library
        -Teil A
            -Sub Part
                -Include
        -Teil B
            -Sub Part 1
                -Include
            -Sub Part 2
                -Include
        -Teil C
            -Include
    

    Aber CodeBlocks scheint immer nur unmittelbar in dem angegebenen Order zu suchen (also bei "usr/Library" findet er keine Dateien). Kann ich CodeBlocks irgendwie beibringen, auch in alle Unterorder zu gucken? Weil die Ordner alle per Hand anzugeben ist fast unmöglich (sind ca. 200 Unterorder).



  • Du kannst in den Compiler-Optionen angeben, wo angefangen wird zu suchen, und in den Quell-Dateien, welche Dateien geladen werden sollen - das war's.
    Die Ordner-Struktur deiner Bibliothek ist natürlich sehr ungünstig und jeden Include Ordner in den Optionen anzugeben zu umständlich, stattdessen solltest du einfach die relativen Pfade der einzubettenden Header-Dateien angeben.

    Z.B.:
    Search directory: "usr/local/include/library_xy"

    Irgendwo im Code:

    #include <Teil A/Sub Part/Include/meinHeader.h>
    


  • Danke für deine Antwort.
    Das Problem ist, dass die library selbst ihre header nur über den Headernamen einbindet. Deine Lösung ginge zwar für Dateien, die ich selbst schreibe, aber ich würde ungern in den Librarydateien selbst rumschreiben und alle #includes ändern. Vielleicht füge ich einfach den gesamten Library Order mit der "Add Files recusivly" Option meinem Projekt zu. Oder ist das eine schlechte Idee? Werds heute abend mal ausprobieren 😋



  • Editor84 schrieb:

    Das Problem ist, dass die library selbst ihre header nur über den Headernamen einbindet.

    Dann ist das wohl nicht eine Bibliothek, sondern du willst es dir nur einfach machen, viele auf einmal in das Projekte einzubinden. Nur wenn es so viele sein sollen, dass das Eintragen in die Compiler-Optionen zu aufwändig ist, dann machst du wohl irgendetwas falsch.



  • Hm, vielleicht beschreibe ich das Problem falsch oder ich habe das Prinzip noch nicht verstanden.
    Die Library (heißt das so?), die ich benutzten möchte, ist OpenFoam. Hier ist zu sehen, wie OpenFoam aufgebaut ist. In meinem Projekt brauche ich einige "spezielle" sachen der Library, zB. "engine". Im Engine-SubDirecotry gibt es ein Include directory ("/engine/include") - soweit, so einfach.
    Allerdings brauche ich auch die "Allgemeinen" Header, die von allen Teilen der Library benutzt werden. Die Allgemeinen Header befinden sich in /OpenFoam. Allerdings ist dort nicht ein Include Ordner, sondern viele SubFolder mit Headern, die von großen Teilen der Library benutzt werden.
    Im mitgelieferten make File wird der komplette /OpenFOAM Ordner durchsucht, aber das geht bei CodeBlocks halt nicht.
    Deswegen sehe ich als einzige Möglichkeit, den /OpenFOAM-Ordner meinem Projekt hinzuzufügen. Denn sonst müsste ich ja immer das Projekt Kompilieren -> schauen welcher Header fehlt -> Header bei Codeblocks bekannt machen -> Kompilieren -> usw. Und das sind einfach zu viele Dateien


Anmelden zum Antworten