Ich habe ein Projekt, das 3-4 verschiedene Open Source C / C ++ - Bibliotheken verwendet.
Ich habe diese Bibliotheken für mehrere Plattformen erstellt und Include-Dateien und statische Bibliotheken für verschiedene Plattformen in meinem Projekt eingecheckt.
Ich habe jedoch mit einigen Problemen zu kämpfen. Bei all diesen Projekten geht es um das Abhängigkeitsmanagement. Und ich suche nach Best-Practice-Ratschlägen.
1) Woher weiß ich, was ich genau benutze?
Ich habe keine Möglichkeit, eine Version einer statischen Bibliothek zu erhalten. Als Ergebnis muss ich irgendwie verfolgen, welche Version der statischen Bibliothek ich verwende (kann SHA eines Commits sein, aus dem es erstellt wurde)?
Dies ist besonders wichtig, wenn ich herausfinden muss, wann diese Bibliotheken aktualisiert werden müssen.
2) Wie reproduziere ich den Build?
Ich hätte mich schwer tun können, eine bestimmte Bibliothek für eine bestimmte Plattform zu erstellen. Ich habe eine Weile gebraucht, um es herauszufinden.
Das nächste Mal, wenn ich dieselbe Bibliothek erstellen muss, könnte in einem halben Jahr sein (wenn ich aus irgendeinem Grund ein Upgrade durchführen muss. Bis dahin werde ich mich jedoch nicht mehr an irgendetwas und eine Umgebung erinnern, auf der sie erstellt wurde wird lange weg sein.
3) Sollte ich diese Bibliotheken mit einer Kopie des Quellcodes versehen?
Dies ist ein geringeres Problem. Es ist jedoch immer noch ein Problem. Es ist schön sicherzustellen, dass Builds reproduzierbar sind (und dies erfordert Quellcode).
quelle
Wenn die Include-Dateien oder libs-Dateien noch keine Versionsnummer enthalten, fügen Sie jedem lib-Ordner selbst eine Textdatei "version.txt" (mit der Versionsnummer) hinzu und checken Sie diese zusammen mit der lib- und include-Datei in Ihr VCS ein . Wenn Sie jedoch die vollständige Quelle der Bibliothek versionieren (Punkt 3), ist die Wahrscheinlichkeit hoch, dass bereits eine Quellcodedatei mit der Versionsnummer vorhanden ist, sodass Sie in diesem Fall keine eigene pflegen müssen.
Versuchen Sie, so viel wie möglich zu automatisieren. Verwenden Sie Skripte, Makefiles oder Dateien Ihrer bevorzugten Build-Tools. Stellen Sie dies alles unter Quellcodeverwaltung. Wenn manuelle Schritte erforderlich sind, schreiben Sie die Details in eine Textdatei (z. B. readme_build.txt) und stellen Sie diese ebenfalls unter die Quellcodeverwaltung.
Sie sollen eine haben Kopie des Quellcodes , sondern Gabel nur bei Bedarf (zum Beispiel, wenn Sie einen dringenden Fehler stolpern, und der ursprüngliche Autor nicht beheben kann es contraints innerhalb Ihrer Zeit). Oder wenn die Autoren eine andere Compilerumgebung als Sie verwenden und einige Änderungen vorgenommen werden müssen, damit die Bibliothek in Ihrer Umgebung funktioniert. Beachten Sie jedoch, dass jede Änderung des ursprünglichen Quellcodes in Ihrem Fork höchstwahrscheinlich die Integration von Updates zu einem späteren Zeitpunkt erschwert.
Trotzdem empfehle ich, eine Kopie des ursprünglichen (ungegabelten) Quellcodes der von Ihnen verwendeten Bibliotheken zu erhalten. Auf diese Weise können Sie die Bibliothek später teilen oder warten, wenn dies erforderlich wird, selbst wenn der ursprüngliche Betreuer beschließt, die Bibliotheksquellen aus dem öffentlichen Web zu widerrufen.
quelle