Forum: Compiler & IDEs Projektstruktur überarbeiten!


von Maik (Gast)


Lesenswert?

Hi zusammen,
in einem vorhandenen c++ Projekt wird z.Z. folgende Projektstruktur 
verwendet:

include folder:
  NamespaceAObject.h
  NamespaceBObject.h
src folder:
  NamespaceAObject.cpp
  NamespaceBObject.cpp

Wenn mehrere geschachtelte Namespaces existieren so tauchen entsprechend 
alle Namen im Filename auf. Die Filenames werden lang und 
unübersichtlich. Meine Idee war nun die Struktur wie folgt zu ändern:

include folder:
  NamespaceA folder:
    Object.h
  NamespaceB folder:
    Object.h
src folder:
  NamespaceA folder:
    Object.cpp
  NamespaceB folder:
    Object.cpp

d.h. die Namespaces werden aus dem Filename entfernt und spiegeln sich 
in der subfolder Struktur wieder. Nun ergibt sich aber das Problem das 
es source Files gibt die gleich heissen ( -> Object.cpp ) 
dementsprechend werden die Object Files überbügelt und es gibt 
Linkerfehler...

- Welche Projektstruktur würder ihr mir empfehlen ?
- Welche Möglichkeiten habe ich Object Filenames eindeutig zu machen ?

von Peter D. (peda)


Lesenswert?

Um was für eine Projektgröße handelt es sich?

Ich bearbeite nur kleine Projekte (30 Files, 10.000 Zeilen -> 50kB 
Code).
Da kommt alles in ein Projektverzeichnis und die Namen sind möglichst 
kurz (Main.c, UART0.c, Timer0.c, DAC.c).

Generell sollten alle Files eines Projekts unterschiedlich heißen.
Gleiche Namen in unterschiedlichen Verzeichnissen werden irgendwann 
Ärger machen.


Peter

von Karl H. (kbuchegg)


Lesenswert?

Dateinamen eindeutig halten.
Auf keinen Fall den Verzeichnisnamen als wesentliches 
Unterscheidungskriterium nutzen, es sei denn es handelt sich um Objekte 
mit identischer Funktionalität für unterschiedluiche Konfigurationen.

Hat man zb LCD Routinen für Display A und Display B, dann kann man 
darüber nachdenken, identische Filenamen zu verwenden. Das hat beim 
Austausch eines Displays von A nach B gewissen Vorteile, die sich aber 
ins Gegenteil verwandeln, wenn man mal beide Displays gemeinsam in einem 
Program benötigt.

Als hingegen völlig unnötig und auch kontraproduktiv halte ich hingegen 
die Trennung von Src-Files und Header-Files in verschiedene 
Verzeichnisse. Ausser möglichem Ärger bringt das nichts. Lass 
zusammengehörende Teile beisammen! Header File und Src-Files gehören nun 
mal zusammen. Erstell man keine Objekt-Library, dann macht das eine ohne 
das andere überhaupt keinen Sinn. Man hat dann nur Ärger, weil man beim 
Umkopieren immer wieder einmal eine der beiden Komponenten vergisst.

von Maik (Gast)


Lesenswert?

Schonmal vielen Dank für eure Vorschläge. D.h. um die ganze Sache 
übersichtlicher zu gestalten könnte ich Unterordner einfügen. Die 
Filenamen belasse ich dann in ihrer bisherigen Form damit sie eindeutig 
bleiben.

c und h Files habe ich bisher getrennt um die Übersichtlichkeit zu 
erhöhen.

Das Gesamtprojekt hat einem Umfang von einigen hundert Files und ~60K 
LOC ( allerdings aufgeteilt in mehrere Libs ).

von Karl H. (kbuchegg)


Lesenswert?

Maik schrieb:

> c und h Files habe ich bisher getrennt um die Übersichtlichkeit zu
> erhöhen.

Das ist nicht wirklich übersichtlicher.
Das wird nur in der Verwendung 'komplizierter', weil man beim Hinzufügen 
von Files in ein neues Projekt ständig den Ordern von dem man hinzufügen 
will, wechseln muss.

So sind beide Files beisammen auf einem Verzeichnis und man merkt soger 
Tippfehler im Filenamen viel leichter, weil zusammengehörende Files in 
der Fileselektion (nach Namen sortiert) nicht mehr beieinander stehen.

> Das Gesamtprojekt hat einem Umfang von einigen hundert Files und ~60K
> LOC ( allerdings aufgeteilt in mehrere Libs ).

Und? Ist noch nicht wirklich groß.
Zerteile als erstes die Files, die zu einer LIb gehören in verschiedene 
Verzeichnisse. Und schon brauchst du dich dann in der Organisation nur 
noch um eine Lib nach der anderen kümmern. Aus den paar hundert Files, 
werden so ganz schnell <100.

von Maik (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Und? Ist noch nicht wirklich groß.
> Zerteile als erstes die Files, die zu einer LIb gehören in verschiedene
> Verzeichnisse. Und schon brauchst du dich dann in der Organisation nur
> noch um eine Lib nach der anderen kümmern. Aus den paar hundert Files,
> werden so ganz schnell <100.

Zumindest so gross das es schon mit Arbeit verbunden ist es zu ändern.

Ich verstehe noch nicht ganz wie du das meinst. Das Projekt besteht 
schon aus mehreren Libs. Die Funktionalität der Libs ist sinnvoll 
getrennt. Nur die Organisation innerhalb der Libs möchte ich optimieren. 
Oder meintest du das ?

von Karl H. (kbuchegg)


Lesenswert?

Maik schrieb:

> Ich verstehe noch nicht ganz wie du das meinst. Das Projekt besteht
> schon aus mehreren Libs. Die Funktionalität der Libs ist sinnvoll
> getrennt.

Das ist doch schon mal die halbe Miete (eigentlich sogar mehr :_)

> Nur die Organisation innerhalb der Libs möchte ich optimieren.
> Oder meintest du das ?

Ich ging davon aus, dass momentan alle Files (aller Libs) auf ein und 
demselben Verzeichnis liegen.
Wenn dem so ist:
  Dann erst mal für jede Lib ein Subverzeichnis anlegen und die Files 
entsprechend ihrer Zugehörigkeit zur jeweiligen Lib ins richtige 
Subverzeichnis verschieben. Damit hast du dann schon einen Grossteil der 
Arbeit erledigt.

Ach und noch was:
Versuch jetzt nicht, nach der 'optimalen' Struktur zu suchen und darüber 
großartig zu philosophieren. Mach einfach das, was dir zur Zeit am 
vernünftigsten erscheint. 'Optimal' wird es sowieso nie und man kann 
Tage damit verbringen, Librarystrukturen umzugestalten um dann am Ende 
wieder beim Anfang zu landen :-)

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
Noch kein Account? Hier anmelden.