it-swarm.com.de

Was ist der richtige Weg, um Code von Drittanbietern in ein C- oder C ++ - Projekt einzufügen?

Ich möchte einige Open Source-Bibliotheken in mein C-Projekt integrieren. Dies ist das erste Mal, dass ich das mache, daher weiß ich nicht, was der richtige oder häufigste Weg ist, dies zu tun.

Ich sehe zwei mögliche Wege, die ich gehen kann:

  1. Laden Sie den Code jeder Bibliothek herunter, die ich verwenden werde, fügen Sie sie meinem Projektordner hinzu und ändern Sie sie nach Bedarf.
  2. Listen Sie einfach jede Bibliothek als Abhängigkeit auf. Der Benutzer würde sie also auf seinen Computer herunterladen und sie mit (möglicherweise) einer Makefile-Konfiguration in das Projekt aufnehmen.

Ich denke, Option 1 ist aus zwei Gründen besser:

  1. Ich entbinde den Benutzer von der Aufgabe, die Abhängigkeit herunterzuladen und zu konfigurieren.
  2. In meinem Projekt haben zwei Bibliotheken überlappenden Code. Ein Teil einer Bibliothek ist eine Teilmenge der anderen. Sie haben dieselben Funktionen und dieselben Bezeichnernamen (Variablen, Funktionen, #defines). Ich hätte also einige Konflikte, die ich nicht beheben kann.

Aber ich denke nur Option 1 ist besser. Ich weiß wirklich nicht, was das Beste ist. Vielleicht weiß jemand, wie man die Konflikte zwischen den Bibliotheken behebt, und dann kann sich meine Meinung ändern. Ich stelle diese Frage, weil ich nicht weiß, welchen Weg Programmierer normalerweise einschlagen. Ich weiß auch nicht, was die Vor- und Nachteile jeder Alternative sind. Und ich weiß auch nicht, ob es andere Alternativen gibt.

pdate: Die erwarteten Benutzer sind Programmierer.

7
user300750

@ 17of26 gab viele gute Gründe, warum # 2 gefährlich ist und warum # 1 sinnvoller ist. Aber ich denke, es fehlt eine Sache, für die ich Folgendes empfehle:

  • laden Sie den Code der Bibliothek herunter, die Sie verwenden möchten.
  • füge es dem Projektordner hinzu,
  • aber nicht willkürlich ändern !!

Vermeiden Sie nach Möglichkeit Änderungen. Wenn dies nicht möglich ist, versuchen Sie, die direkten Änderungen auf ein Minimum zu beschränken und alles andere in separaten Dateien zu speichern. Verwenden Sie bei Bedarf Skriptdateien oder Patchdateien. Stellen Sie daher sicher, dass alle Änderungen an den Bibliotheken oder an der Makefile-Konfiguration dokumentiert sind und reproduziert werden können.

Dies gibt Ihnen eine bessere Möglichkeit, bei Bedarf zu einem späteren Zeitpunkt auf neuere Versionen dieser Bibliotheken zu aktualisieren.

Natürlich gibt es keine Garantie dafür, dass die auf Version 1.0 einer Bibliothek angewendeten Patches oder Konfigurationsänderungen auch direkt auf Version 2.0 dieser Bibliothek angewendet werden können. Die Chancen sind jedoch umso höher, wenn nur wenige Patches/Änderungen vorhanden sind und der Aufwand für deren Anwendung wahrscheinlich geringer ist.

9
Doc Brown

Sie möchten immer alle Abhängigkeiten mit Ihrem Projekt verpacken.

Ihre Software wird mit einer bestimmten Version einer bestimmten Bibliothek erstellt und getestet. Es ist nicht garantiert, dass es mit einer anderen Version funktioniert.

Sie müssen Ihren Code mit genau dieser Version der Bibliothek versenden. Wenn Sie dies nicht tun, öffnen Sie die Tür zu einem Albtraum.

Angenommen, Sie erstellen und testen Ihren Code mit der Bibliothek Foo v1.0. Sie liefern Foo v1.0 nicht mit Ihrem Produkt aus und sagen stattdessen "Hey Benutzer, holen Sie sich diese Bibliothek Foo v1.0".

Stellen Sie sich nun vor:

  • Foo verschwindet aus dem Internet. Vielleicht wird es von einer Firma gehostet, die ihr Geschäft aufgibt. Oder vielleicht hat der Entwickler von Foo v1.0 die E-Mails von verärgerten Benutzern satt und entfernt den öffentlichen Zugriff auf die Bibliothek.
  • Foo ist sehr aktiv entwickelt. Foo ist jetzt auf v8.0. Der Foo-Entwickler stellt die Unterstützung von älteren Versionen als Version 7.0 ein und entfernt den Zugriff auf frühere Versionen.
  • Der Foo-Entwickler nimmt eine wichtige Änderung an Version 1.0 vor, erhöht die Version jedoch nicht. Wenn Benutzer v1.0 herunterladen, erhalten sie eine andere Bibliothek als die von Ihnen verwendete und es funktioniert einfach nicht.

Sie vermeiden all diese potenziellen Kopfschmerzen, indem Sie genau die Binärdateien versenden, die Software zum Funktionieren benötigt.

5
17 of 26

Eine übliche Methode zur Verwaltung von Code von Drittanbietern ist die Verwendung von "Vendor Branches" (ich gehe davon aus, dass Sie ein Versionskontrollsystem wie git, svn usw. verwenden).

Mithilfe von Lieferantenzweigen können Sie Änderungen am Code von Drittanbietern verfolgen und diese Änderungen zusammen mit allen Änderungen, die Sie an Ihrem Code vornehmen müssen, um mit diesen Änderungen arbeiten zu können, problemlos in Ihren Code integrieren.

Das Thema der Zweigstellen von Anbietern ist zu kompliziert, um hier darauf einzugehen (und die Details hängen davon ab, welche vcs Sie verwenden), aber es gibt viele nützliche Anleitungen im Web.

1
Dipstick