Behandlung von C ++ - Abhängigkeiten (plattformübergreifend)

8

Ich habe den Eindruck, dass diese Frage hundertmal gestellt wurde, aber nie vollständig beantwortet wurde.

Ich arbeite an einem kleinen Projekt, das irgendwann für die drei großen PC-Plattformen (Windows, Mac & amp; GNU / Linux) veröffentlicht werden soll, also ist es eine schlechte Idee, sich früh in Technologie zu sperren. Zum Glück, aber auch leider, während der frühen Entwicklung, zielen wir nur auf 32-Bit-Windows.

Auf einer Codeebene ist die plattformübergreifende Entwicklung relativ einfach, wenn Sie die richtigen Bibliotheken auswählen. Auch die Erstellung von Software auf mehreren Plattformen ist relativ unkompliziert. Ich versuche, entweder GYP oder CMake zu verwenden.

Das Problem sind die Abhängigkeiten. Um das Projekt zu erstellen, benötigen Sie: SDL, SDL_image, SDL_ttf, iconv, libxml2, libxmlmm, sigc ++, wxWidgets, glew, bullet, openALsoft und vielleicht später mehr.

Bisher habe ich drei Möglichkeiten gefunden:

  1. checken Quellen ein und erstellen sie als Teil des Projekts
  2. Einchecken von Binärdateien
  3. Verwalten Sie Abhängigkeiten außerhalb der Quellstruktur

Der erste scheint übertrieben zu sein, da Sie im Grunde Ihren Fork der Bibliothek und Ihr benutzerdefiniertes Build-System beibehalten müssen.

Die zweite Option klingt wie die Aufgabe, wenn Ihr Ziel nur eine oder vielleicht zwei Plattformen hat. Aber wenn man alle verschiedenen Ziele, einschließlich der 32/64-Bit-Varianten, mitzählt, dann fängt das auch an, sich in etwas kaum überschaubares zu verwandeln.

Die dritte Option hängt von der Umgebung ab. Wenn Sie Ihre Entwickler manuell mit den Abhängigkeiten umgehen lassen, werden Sie niemals schlafen. Es ist kaum möglich, jede einzelne Abhängigkeit aufzubauen und zu nutzen. Nicht zu vergessen, dass Sie nicht sicherstellen können, dass jeder Entwickler die richtige Version verwendet.

Wenn Sie sich andere Sprachen anschauen, lösen sie das Problem anders. Mit Systemen wie npm, marvin oder phing verwalten Sie nur eine Konfigurationsdatei im Projekt und die Werkzeuge holen dann alle benötigten Abhängigkeiten.

Ich habe überlegt, die Abhängigkeiten zentral zu erstellen, sie in zip / deb / rpm / whatever-Pakete zu packen und sie in ein Repository zu packen. Dann würde jeder Entwickler die Abhängigkeiten für seine Plattform in das Repository kopieren (aber nicht einchecken), bevor er erstellt. Dies würde vorzugsweise automatisch als ein Pre-Build-Schritt durchgeführt werden.

Ich möchte vor allem kein zusätzliches Build-System. Ich habe mich umgesehen und das einzige, was im Entferntesten tut, was ich will, ist Ivy. Aber entweder fehlt etwas oder Ivy ist völlig über das Engineering des Problems. Gibt es etwas Einfaches, um dieses Problem zu lösen?

Ich bin inches davon, mein eigenes zu bauen.

    
rioki 02.05.2013, 12:28
quelle

1 Antwort

3

Ich würde empfehlen, dass Sie Ihre eigenen nicht bauen.

Wir verwenden ant / ivy / Hudson, um unsere plattformübergreifenden (Windows und Linux) Builds zu automatisieren. Wir verwenden auch Nexus (Maven) als unser Artefakt-Repository, das plattformspezifische Builds unserer 3rd-Party-Bibliotheken sowie unsere eigene Anwendung enthält. Hudson integriert sich sauber in Perforce (unser Software-Repository).

Wir sind auch dabei, separate 32-Bit- und 64-Bit-Artefakte von allem zu erstellen und ant / ivy wird dies erheblich vereinfachen.

Es hat gut für uns geklappt.

    
rohitsan 02.05.2013 12:37
quelle