Paketverwaltung für C ++

8

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:

    
Marco Zimmerman 29.07.2016, 10:55
quelle

3 Antworten

5

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.

  1. Verwenden Sie CMake , um Build-Konfigurationen für Ihre abhängigen Projekte zu erstellen.
  2. Verwenden Sie ExternalProject Befehle, um die Abhängigkeiten der übergeordneten Projekte auszudrücken .
    • ExternalProject unterstützt sowohl Git als auch Mecurial, CSV, SVN und direkte Tarball-Downloads.
    • Sie können das genaue Commit, Tag oder die Verzweigung in Git angeben.
    • Unterstützt Git-Authentifizierung über SSL oder Basic HTTP.
  3. Führen Sie CMake für das übergeordnete Projekt aus. Alle Abhängigkeiten werden automatisch heruntergeladen und kompiliert.

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.

    
Norman B. Lancaster 19.12.2016 18:52
quelle
3

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.

    
v1bri 26.07.2017 19:57
quelle
0

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.

    
Paul Fultz II 26.10.2017 23:28
quelle

Tags und Links