Eines der beliebtesten Wege Projektverzeichnis zu organisieren, ist mehr oder weniger wie folgt aus:C++ Projekt Quellcode Layout
MyLib +--mylib_class_a.h mylib_class_a.cpp mylib_library_private_helpers.h mylib_library_private_helpers.cpp MyApp +--other_class.h other_class.cpp app.cpp
app.cpp
:
#include "other_class.h"
#include <mylib_class_a.h> // using library MyLib
Alle .h
und .cpp
Dateien für die gleiche Bibliothek sind im selben Verzeichnis. Um Namenskonflikte zu vermeiden, werden Dateinamen oft mit dem Firmennamen und/oder dem Bibliotheksnamen vorangestellt. MyLib wird in MyApps Header-Suchpfad usw. sein. Ich bin kein Fan von Dateinamen, aber ich mag die Idee, die #include
zu betrachten und genau zu wissen, wo diese Header-Datei gehört. Ich hasse diesen Ansatz nicht, Dateien zu organisieren, aber ich denke, es sollte einen besseren Weg geben.
Seit ich ein neues Projekt starte, möchte ich einige Ideen für die Verzeichnisorganisation einholen. Derzeit möchte ich diese Verzeichnisstruktur:
ProjA +--include +--ProjA +--mylib +--class_a.h +--app +--other_class.h +--src +--mylib +--class_a.cpp library_private_helpers.h library_private_helpers.cpp +--app +--other_class.cpp app.cpp util.h
app.cpp
:
#include "util.h" // private util.h file
#include <ProjA/app/other_class.h> // public header file
#include <ProjA/mylib/class_a.h> // using class_a.h of mylib
#include <other3rdptylib/class_a.h> // class_a.h of other3rdptylib, no name collision
#include <class_a.h> // not ProjA/mylib/class_a.h
#include <ProjA/mylib/library_private_helpers.h> // error can't find .h
.cpp
Dateien und private (nur sichtbar für sofortige Bibliothek) .h
Dateien im src-Verzeichnis gespeichert werden (src manchmal lib genannt). Öffentliche Header-Dateien sind in einer Projekt/Lib-Verzeichnisstruktur organisiert und enthalten <ProjectName/LibraryName/headerName.h>
. Dateinamen haben keine Präfixe. Wenn ich MyLib jemals für andere Teams verwenden wollte, konnte ich einfach mein Makefile ändern, um die entsprechenden Binärdateien und das gesamte include/ProjA-Verzeichnis zu kopieren.
Sobald Dateien in die Quellcodeverwaltung eingecheckt sind und die Leute anfangen, daran zu arbeiten, wird es schwierig sein, die Verzeichnisstruktur zu ändern. Es ist besser, es sofort richtig zu machen.
Jeder mit Erfahrung mit der Organisation von Quellcode wie folgt? Alles was dir nicht gefällt? Wenn Sie einen besseren Weg haben, würde ich gerne etwas darüber erfahren.
Ich stimme zu, dass es am Anfang zu viel wird. Meine Sorge ist, wenn das Projekt in Gang kommt, und Wachstum auf eine anständige Größe, wird niemand die Zeit verbringen wollen, um alle Dateien neu zu organisieren und alle Include-Pfade zu ändern. –
Nun, das könnte stimmen. Aber Sie scheinen daran interessiert zu sein, alles in Ordnung zu halten, also könnten Sie es tun! Ich arbeite in einem Unternehmen mit etwa 60 in Teams unterteilten Entwicklern. Vor ein paar Wochen haben einige Teams ein paar Tage damit verbracht, ihre Dateien neu zu organisieren. Die Organisation von Dingen ist ein fortlaufender Prozess. Ein guter Programmierer korrigiert den Code, wenn er außer Kontrolle gerät, zum Beispiel wenn eine Codedatei zu groß wird, dass es schwierig wird, sie zu verwalten, sie sollten sie teilen. Genauso ist es bei einem Ordner mit Dateien. –
Diese Teams hätten vor drei Jahren noch nicht vorhersehen können, welche Struktur sie jetzt brauchen würden. Wenn sie dann versucht hätten zu raten, hätten sie am Ende sowieso reorganisiert werden müssen. Also, ich sollte mir keine Sorgen machen. Wenn Sie zu Beginn eines Projekts eine gute Vorgehensweise entwickeln möchten, sollten Sie Ihre Zeit damit verbringen, einen guten Weg zu finden, wie Sie den Code in einer Unit testen können und wie Tests als Teil ausgeführt werden von einem automatisierten Build ... weil Unit-Testing ist definitiv etwas, das schwer einzuführen ist, wenn Sie unterwegs sind. –