2010-11-26 11 views
1

Ich arbeite derzeit an einem C++ Produkt. Es wurde entworfen, um eine gewisse Flexibilität zu haben und wurde größer und größer. Jetzt planen wir, in einem Projekt zusammenzuarbeiten, in dem wir Teile des Produkts beitragen möchten: einige Teile als Quellcode, manche Teile als statische Link-Bibliotheken, manche Teile gar nicht."Statisches Plugin" -System (über Build-System) in C++

Ich möchte eine Version jeder Quelldatei behalten, die in beiden Projekten verwendet wird und vermeidet Verzweigung des Ganzen usw. Ich habe mich also gefragt, was ich brauche, um das "vollständige Produkt" intern mit allen Dateien zu haben und auch in der Lage sein, einen Teil dieser Dateien (hin und wieder) zu extrahieren und diese Teilmenge als Arbeitseinheit an andere weiterzugeben. (Ich gehe davon aus können wir sicherstellen, dass diese Dateien nicht in das Kooperationsprojekt verändert, werden wir nur Sachen dort hinzufügen.)

Ich denke, ich brauche

  • eine Software-Architektur, die lose so gekoppelt ist, dass Teile können entfernt werden, ohne das System zu zerstören. Ich denke, der Begriff "statisches" Plugin ist hier angebracht, weil ich denke, dass ich von Plugin-Systemen lernen kann, aber ich muss nicht die Fähigkeit haben, sie dynamisch zu laden, sie können auf statische Art und Weise verknüpft werden. Ich hoffe, dass dies mich und meine Mitarbeiter dazu zwingen könnte, das System zu erweitern, indem man eine Art Plugin hinzufügte, anstatt hier und da Klassen einzufügen und so die Kopplung zwischen den Dingen einzuführen.
  • ein Build-System, das mich bei der Auswahl der Plugins unterstützt, um neue Subsets zu erstellen und "freizugeben", indem nur das extrahiert wird, was ich brauche.

Gibt es Internetquellen, die helfen könnten? Nach welchen Keywords soll gesucht werden?

Haben Sie Vorschläge, wie Sie damit umgehen sollen?

Antwort

4

Es gibt eine interessante Artikelserie von Dr. Dobbs, die Sie vielleicht ausprobieren möchten. Ich erinnere mich, dass es neben der üblichen dynamischen Verknüpfung auch die statische Verknüpfung von Plugins unterstützt. Überprüfen Sie Building Your Own Plugin Framework.

Viel Glück!

0

In erster Linie müssen Sie so etwas wie git:

http://github.com

die Quelle zu verwalten. Um "Plugins" zu verwalten, statisch oder nicht, kann es sich lohnen, bestehende Systeme zu betrachten, die dies bereits tun: Ich kann empfehlen, zu untersuchen, wie Python es tut (da es eine gut spezifizierte C-API zum Verwalten gibt).

Das beste Build-System, das ich kenne, ist .. Python. Vergiss es :) Ein vorgefertigtes ist Erick Tryzelaars fbuild (erhältlich bei github). [Nun, ich denke es ist das Beste, weil ich es verwende:]