Richtiger Aufbau eines Projektes -Pfade-include



  • Hallo liebe Gemeinde

    Ich habe mal wieder ein Problem mit dem inkludieren von Header Dateien in meinem Projekt und wollte mal fragen wie man so was den richtig macht.
    Um das Problem genauer zu beschreiben zeige ich hier mal ein ASCII-Bild... kann das nämlich nicht richtig in Worte fassen.

    .../ProgrammA
         ,__________
         |Main.cpp  |
         |          |
         |          |
         "----.-----'  /IOWork
              |       ,-------------.
              |       |IO_Write.cpp |
              +-------|IO_Write.h   |
              |       |             |
              |       |_____________|
              |       
              |       
              |       /Teil-Suchen
              |       ,-----------.
              |       |SucheA.cpp |
              |_______|SucheA.h   |
              |       |           |
              |       |___________|
              |             |
              |             |          /Teil-S-Lesen
              |             |         ,'''''''''`.
              |             |         | LeseA.cpp|
              |             |_________| LeseA.h  |
              |             |         |          |
              |             |         |__________|
              |             |
              |             '
    

    (Die Kästchen sollen die verschiedenen Ordner darstellen.)

    Mein Problem ist das wenn ich in LesenA.cpp, IO_Write.h inkludieren will ist die Datei natürlich nicht bekannt.
    Wie mache ich das also richtig?
    Eine Lösung wäre natürlich alle Dateien in ein Verzeichniss zu schmeissen, was ich aber als sehr unschön empfinde.
    Genauso wie die Idee an jeder Stelle wo ich es brauche eine Kopie anzulegen oder den Absoluten Pfad anzugeben.
    Wie wird das bei größeren Projekten angegangen?
    Bin mir eigentlich ziemlich sicher das es dafür mindestens eine Lösung gibt, weiß nur nicht wonach ich bei google suchen soll.....

    Mit besten Danke fürs Nachdenken!

    P.S. Arbeite mit gcc unter Debian.



  • Hallo magier-phil,

    eine Möglichkeit wäre die Dateien auf deiner Platte "nur" in 3 Kategorien zu ordnen:

    - h-Datei
    - cpp-Datei
    - Ressourcen

    In deiner IDE kannst du die Dateien nochmal intuitiv strukturieren (z.B. "Filter" in Visual Studio) wie du es auch skizziert hast. Damit hast du den Vorteil, dass du an den Pfaden nichts ändern musst, da alle *.h in einem "include"-Ordner stecken. Gleichzeitig behälst du den Überblick, da die Dateien in deiner IDE schön strukturiert sind.

    Aber die Geschmäcker sind verschieden, es gibt bestimmt noch mehr Vorgehensweisen.

    Viele Grüße,
    MaBa



  • magier-phil schrieb:

    Mein Problem ist das wenn ich in LesenA.cpp, IO_Write.h inkludieren will ist die Datei natürlich nicht bekannt.

    In der Regel haben die Compiler eine Möglichkeit die Suchpfade der Headerfiles zu erweitern. Beim gcc ist die -I Option dafür da.

    Du verwendest bestimmt eine Makefile, die das Bauen für dich erledigt. Dann musst du zu den CFLAGS bzw. CXXFLAGS (für C++) die -I Parameter einbauen.

    Angenommen du hast in jedem Verzeichnis eine Makefile:

    # /Teil-S-Lesen/Makefile
    CFLAGS=-I.. -I../Teil-Suchen -I../IOWork -I../../
    

    und dann kannst du alles inkludieren, egal, wo sie sich befinden.

    Poste doch mal dein Buildsystem, wie kompilierst bzw. hast du vor zu kompilieren?



  • Hey und Danke

    supertux schrieb:

    Poste doch mal dein Buildsystem, wie kompilierst bzw. hast du vor zu kompilieren?

    Also bisher habe ich das alles "ganz" normal von Hand kompiliert.
    SSH->Linux-Konsole

    Test# g++ -Wall main.cpp TeilSuchen/TeilSLesen/LeseA.cpp IOWork/IO_Write.cpp -o Test
    

    Meine bisherigen Experimente bei programmieren haben Make bisher nicht erforderlich gemacht.
    Arbeite vielleicht etwas ungewöhnlich per "Hand"...
    --habe ne Samba Freigabe auf meine Linux Kiste, die keinen Bildschirm hat und bearbeite den Code mit Notepad++
    --und zwei SSH-Konsolen für g++ und zum Aufrufen des Programms
    von meinem "großen" Windoof PC aus.


Anmelden zum Antworten