Ich arbeite in einer Firma, in der sie ein Projekt erstellen, das aus Komponenten besteht, die von verschiedenen Entwicklerteams separat entwickelt werden. Alles in C ++.
Sie benutzen viele gemeinsame Bibliotheken und verwalten sie alle, sie haben ein Werkzeug erstellt, um die Version des Projekts und die Versionen der Bibliotheken irgendwie in Beziehung zu setzen.
Die Frage betrifft die Existenz eines Tools auf dem Markt, das dies bereits tut:
Ich meine, wenn ich zu diesem Tool gehe, kann ich zum Beispiel die Version 4.0 unseres Projekts herunterladen, die genau die Version 4.5 der Bibliothek 1 und 3.4 von Bibliothek 2 hat. Wenn ich auf "Download" klicke, werde ich herunterladen der Quellcode (oder die Binärdatei) dieses gesamten Projekts (Projekt + Bibliotheken) und die konkrete Version jeder Bibliothek.
Wenn ich beispielsweise ein anderes Projekt eines anderen Entwicklers im Unternehmen herunterladen möchte, indem ich die gleichen Bibliotheken in verschiedenen Versionen oder Plattformen verwende, muss ich das nur auswählen und werde das Projekt 2 mit Bibliothek 1 Version 5.0 und Bibliothek 2 2.5 herunterladen und so weiter.
Gibt es auf dem Markt irgendein Werkzeug, das mir erlaubt, einige Relationen zu erstellen, und btw, verbindet sich mit Code Repo (gitlab in unserem Fall)?
Ich habe Gradle, Conan, ... überprüft, aber sie bauen, verwalten nicht "Beziehungen" zwischen den Komponenten.
So ungefähr:
CMake bietet genügend Funktionalität, um diese Arten von Beziehungen innerhalb Ihres Build-Systems zu erstellen. Leider müssen Sie CMake verwenden, um die Builds für all Ihre Projekte zu verwalten, damit dies gut funktioniert. CMake richtet sich sowohl an Visual Studio als auch an GCC, Clang und ICC. Wenn Sie das interessiert, lesen Sie weiter.
Beispielabhängigkeit
%Vor%Es gibt einige andere Befehle innerhalb des ExternalProject-Moduls, die verwendet werden können, um die Abhängigkeit bei Bedarf weiter anzupassen.
Um die Antwort von @ norman-b-lancaster zu verfolgen, sollten Sie sich den Hunter-Paket-Manager ansehen. Es basiert auf der ExternalProject-Funktion von CMake und konzentriert sich stark auf reproduzierbare Builds. Jede Hunter-Version enthält das CMake-Skript, das zum Sperren der Paketversionen aller Abhängigkeiten erforderlich ist.
Ihre Frage legt nahe, dass Sie sich mit der Paketverwaltung in Ihrem Unternehmen befassen (im Gegensatz zu öffentlich verfügbaren Paketen von ex: GitHub). Die Betreuer von Hunter kennen dieses Problem und scheinen bereit zu sein, es zu unterstützen, wenn die Nachfrage vorhanden ist.
Es gibt cget , das eine Möglichkeit bietet, eine Abhängigkeit zu installieren, indem Sie einfach auf den Quell-Tarball zeigen, den Hosting-Service wie github und gitlab bieten. Sie können auch eine requirements.txt
angeben, um alle Abhängigkeiten auch transitiv zu installieren.
Es ist CMake-basiert, das es mit sehr wenigen Änderungen installiert, aber es unterstützt auch andere Nicht-CMake-Pakete . Sie können auch eine Distribution von Rezepten für die Behandlung von Paketen erstellen, die nicht der Standardkonfiguration entsprechen. Erstellen und installieren Sie den Workflow. Für viele C ++ - Projekte gibt es bereits eine Vielzahl von Rezepten, die bereits hier zur Verfügung stehen.
Tags und Links c++ package-managers