Ich arbeite an einer C ++ - Bibliothek. Letztendlich möchte ich es zusammen mit einigen Beispielen und Python- Bindungen für mehrere Plattformen (mindestens Linux und Windows) öffentlich verfügbar machen . Die Arbeit schreitet gut voran, aber im Moment ist das Projekt ziemlich chaotisch, nur in und für Visual C ++ integriert und überhaupt nicht plattformübergreifend.
Daher halte ich eine Bereinigung für angebracht. Das erste, was ich verbessern möchte, ist die Verzeichnisstruktur des Projekts. Ich möchte eine Struktur erstellen, die für die Automake- Tools geeignet ist, um eine einfache Kompilierung auf mehreren Plattformen zu ermöglichen, aber ich habe diese noch nie zuvor verwendet. Da ich (den größten Teil) noch in Visual Studio codiere, muss ich auch irgendwo meine Visual Studio-Projekt- und Lösungsdateien aufbewahren.
Ich habe versucht, nach Begriffen wie "C ++ - Bibliotheksverzeichnisstruktur" zu googeln, aber es scheint nichts Nützliches zu kommen. Ich habe einige sehr grundlegende Richtlinien gefunden, aber keine kristallklaren Lösungen.
Beim Betrachten einiger Open-Source-Bibliotheken habe ich Folgendes festgestellt:
\mylib
\mylib <source files, read somewhere to avoid 'src' directory>
\include? or just mix .cpp and .h
\bin <compiled examples, where to put the sources?>
\python <Python bindings stuff>
\lib <compiled library>
\projects <VC++ project files, .sln goes in project root?>
\include?
README
AUTHORS
...
Ich habe keine / wenig Erfahrung mit Multi-Plattform-Entwicklung / Open Source-Projekten und bin ziemlich erstaunt, dass ich keine guten Richtlinien für die Strukturierung eines solchen Projekts finden kann.
Wie soll man ein solches Bibliotheksprojekt generell strukturieren? Was kann zum Lesen empfohlen werden? Gibt es einige gute Beispiele?
Antworten:
Eine Sache, die unter Unix-Bibliotheken sehr häufig vorkommt, ist, dass sie so organisiert sind, dass:
./ Makefile and configure scripts. ./src General sources ./include Header files that expose the public interface and are to be installed ./lib Library build directory ./bin Tools build directory ./tools Tools sources ./test Test suites that should be run during a `make test`
Es spiegelt etwas das traditionelle Unix-Dateisystem wider, unter
/usr
dem:/usr/src Sometimes contains sources for installed programs /usr/include Default include directory /usr/lib Standard library install path /usr/share/projectname Contains files specific to the project.
Natürlich können diese in enden
/usr/local
(dies ist das Standardinstallationspräfix für GNU autoconf), und sie halten sich möglicherweise überhaupt nicht an diese Struktur.Es gibt keine feste Regel. Ich persönlich organisiere die Dinge nicht so. (Ich vermeide es überhaupt, ein
./src/
Verzeichnis zu verwenden, außer zum Beispiel für die größten Projekte. Ich verwende auch keine Autotools, sondern CMake.)Mein Vorschlag an Sie ist, dass Sie ein Verzeichnislayout wählen, das für Sie (und Ihr Team) sinnvoll ist . Tun Sie, was für die von Ihnen gewählte Entwicklungsumgebung am sinnvollsten ist, erstellen Sie Tools und die Quellcodeverwaltung.
quelle
Es gibt diese großartige Konvention, auf die ich kürzlich gestoßen bin und die hilfreich sein könnte: Das Pitchfork-Layout (auch auf GitHub ).
Zusammenfassend heißt es in Unterabschnitt 1.3 :
Darüber hinaus denke ich, dass das
extras/
Verzeichnis ist, wo Ihre Python-Bindungen gehen sollten .quelle
Ich glaube nicht, dass es dafür gute Richtlinien gibt. Das meiste davon ist nur eine persönliche Präferenz. Bestimmte IDEs bestimmen jedoch eine Grundstruktur für Sie. Visual Studio erstellt beispielsweise einen separaten Bin-Ordner, der in einen Debug- und einen Release-Unterordner unterteilt ist. In VS ist dies sinnvoll, wenn Sie Ihren Code mit verschiedenen Zielen kompilieren. (Debug-Modus, Release-Modus.)
Verwenden Sie, wie greyfade sagt, ein Layout, das für Sie sinnvoll ist. Wenn es jemand anderem nicht gefällt, muss er es einfach selbst umstrukturieren. Glücklicherweise werden die meisten Benutzer mit der von Ihnen gewählten Struktur zufrieden sein. (Es sei denn, es ist wirklich chaotisch.)
quelle
Ich finde die wxWidgets-Bibliothek (Open Source) ein gutes Beispiel. Sie unterstützen viele verschiedene Plattformen (Win32, Mac OS X, Linux, FreeBSD, Solaris, WinCE ...) und Compiler (MSVC, GCC, CodeWarrior, Watcom usw.). Sie können das Baumlayout hier sehen:
https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk/
quelle
Ich kann Ihnen wirklich empfehlen, CMake zu verwenden ... es ist für die plattformübergreifende Entwicklung gedacht und viel flexibler als Automake. Verwenden Sie CMake, und Sie können plattformübergreifenden Code mit Ihrer eigenen Verzeichnisstruktur auf allen Systemen schreiben.
quelle