Gibt es irgendwelche Anstrengungen, um ein Paket-manager für C++?
Einer meiner größten Frustrationen mit meine Lieblings-Sprache ist die Anstrengung, die es dauert, um verschiedene Bibliotheken arbeiten zusammen unter einer einheitlichen Entwicklungsumgebung. Mein größter Wunsch ist nur in der Lage sein zu sagen, meine IDE, oder was auch immer, brauche ich eine bestimmte Bibliothek, und es kümmert sich um das herunterladen, kompilieren(wenn notwendig), es zu installieren, dann einrichten der include-und Bibliothek-Pfade.
Was ich will, ist diese, aber für C++. Ich würde es vorziehen, wenn es arbeitet mit Visual Studio, aber gcc ist ja auch okay. Oder, wenn es ist, es ist ein eigenes separates system, das ist auch in Ordnung. Tut es, allerdings haben die arbeiten in Windows.
Was versprechende Projekte gibt, um dieses problem zu lösen?
- hrmm stackoverflow.com/questions/1541771/...
- In der free-*nix-artigen Welt gibt es
pkg-config
. Dies ermöglicht Ihnen, Autor-Dateien, die definieren, linker-und compiler-flags, d.h.pkg-config --cflags --libs
- Linux hat es, Windows hat es auch... Also was genau willst du?
- Windows hat was? Ich bin auf der Suche nach etwas, das gibt mir die Möglichkeit eine Vielzahl von 3rd-Party-C++ - Bibliotheken ohne Folgen einzigartige Installations-Anweisungen für jede und jeden.
- Ich benutze nie Windows, aber ich kenne Cygwin-Pakete für die Entwicklung. Ich denke, MinGW zu, nach Eran.
- Relevant: nuget.codeplex.com/discussions/396720 und nuget.codeplex.com/discussions/280649
- programmers.stackexchange.com/questions/170679/...
- Kam vor kurzem across conan.io in HackerNews. Es ist beschrieben, wie die Open-Source-C-und C++ - package-manager.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sind unter Verwendung von MinGW gibt es bereits einen Paket-manager, ähnlich wie apt-get /aptitude die tut, was Sie wollen: mingw-get
Verhält es sich ähnlich wie Debian ' s apt-get/aptitude. Unter den Paketen schon enthalten sind, können Sie finden, expat, libxml2, zlib, pthread etc.
Offensichtlich benötigen Sie eine Kopie von MinGW, um mit der Arbeit beginnen.
mingw-get
ist gebrochen.pacman
.Haben Sie als Git als Paket-manager? Ich habe mit git Submodule für Abhängigkeiten und sub-Abhängigkeiten und kombiniert mit kostenlosen git-hosting-services, die Idee ist sehr mächtig.
Gehen Sie einfach in Ihr git-Projekt,
Bestimmte Abhängigkeit Versionen,
Nun, Sie haben festgesteckt, Ihr Paket Abhängigkeit zu einem bestimmten tag und Ihre Einstellungen gespeichert, um Ihr Projekt-repository. Das nächste mal jemand:
Ihre Paket-Abhängigkeit wird auch fixiert werden, um v3.2.
Einige Paket-management-Systeme bieten auch signierte Pakete. Git ermöglicht GPG-signieren Sie Ihre tags und lässt die Leute überprüfen Sie es, indem Sie Ihren öffentlichen Schlüssel an Ihren Schlüsselbund.
So haben wir Paket herunterladen, Abhängigkeit Versionen und können wir emulieren "Paket Signatur". Ein fehlender Teil ist pre-built binaries, die, meiner Meinung nach, ist nicht eine absolute Notwendigkeit. Eine andere fehlende Teil ist die Globale Paket-management. Sie müssen manuell verwalten jedes git-repository, wenn eine Abhängigkeit einer Abhängigkeit wird aktualisiert.
Die Antwort ist die Verwendung von Conda für Verpackung/dependency management und was auch immer Werkzeug, das Sie wie für Gebäude (ich verwende CMake).
Check it out hier:
http://conda.pydata.org/
Conda ist ähnlich wie der Paket-Manager wie apt-get, yum, nuget, etc, aber mit mehrere wichtige Vorteile:
1) cross-Plattform (derzeit Windows, Linux und OSX, aber auch andere Plattformen können einfach Hinzugefügt werden)
2) erfordert KEINE root-Zugriff zu verwenden. In der Tat, kümmert sich nicht um Ihre system-Pakete an alle. Es ist ähnlich dem Aufbau einer gesamten stack bis hinunter zur libc, wenn Sie möchten) in Ihrem Home-Verzeichnis heraus kommen, außer jemand schon gebaut für Sie. Diese Magie erreicht, indem Pakete verschiebbar.
3) Sie pflegen können, wie viele verschiedene Umgebungen, wie Sie möchten side-by-side. Kennt einer von Ihren Anwendungen erfordern python 2.7.6, aber ein anderes benötigt python 2.7.4? Kein problem - Sie können koexistieren in Frieden
4) Sie werden nie wieder gezwungen sein, um getrennte builds für die verschiedenen Linux-Distributionen. Ein richtig konstruiert Conda-Umgebung funktioniert auf jedem von Ihnen. Vergessen Sie nicht, sowie andere Plattformen (z.B. Windows und OSX)!
5) Sie sind nicht mehr verheiratet Versionen von Bibliotheken, die beschlossen wurden, die FÜR Sie durch ein system oder eine IT-Abteilung. Zum Beispiel, ich wurde zur Arbeit gezwungen werden auf RHEL5 Knoten. Die Python-es ist ein Witz (über 10 Jahre alt). Durch die Verwendung von Conda ich umgangen, dass Schmerzen und war in der Lage, auf jeder beliebigen version von Python, das ich wollte, ohne irgendjemand anderes.
6) - Umgebungen können gezippt werden, bis in die "Installer" für die Verteilung.
7) Sie pflegen können, Ihre eigene private repository hinter Ihrer firewall für proprietäre Bibliotheken. Die öffentlichen zentralen repository genannt wird Binstar. Ihre Abhängigkeiten können aus entweder (oder beides).
Viele Menschen glauben fälschlicherweise, dass Conda ist ein Python-only-system, aber eigentlich Conda wurde für die native Verpackung (es ist die Sprache, Agnostiker). Es hat eine riesige Python-Präsenz einfach, weil seine ursprüngliche motivation war, zu überwinden schreckliche native Bibliothek-Unterstützung in Python-andere Verpackungs-system (pip + pypi).
Das einzige problem mit Conda derzeit ist, dass Binstar (zentrales repository) muss nicht jedes Paket noch. Sie werden auf jeden Fall begegnen fehlenden Bibliotheken, die Sie wollen - aber das ist einfach zu beheben: Sie können bauen, was auch immer Paket, das Sie sich mögen, und schieben Sie es auf Binstar. Ich habe dazu Dutzende von nativen Bibliotheken. Es funktioniert ganz gut.
Werde ich nie gehen zurück zu system dependency Manager bei der Entwicklung von C++ - code.
Als von NuGet 2.5, NuGet unterstützt einheimische Projekte. Jedoch, dass das Paket von hand ist ziemlich Komplex, so dass Sie empfehlen die Verwendung von CoApp die Powershell-Tools für NuGet (Dokumentation hier). Mit diesen tools können Sie jetzt veranstalten Sie Ihre C/C++ Pakete von NuGet.
pkg-config
in Unix land. Ich glaube nicht, dass es irgendeine Absicht, damit NuGet arbeiten cross-Plattform, zum Beispiel. Es ist eine gute Lösung, die auf Windows und ich hoffe, er tut gut, aber löst es nicht dieses problem im Allgemeinen Fall für C++ die Möglichkeit Maven für Java, oder die Art, NuGet für C#.Dies ist sehr unwahrscheinlich, einfach weil unterschiedliche C++ - Bibliotheken verwenden Häufig sehr unterschiedliche build-Systeme. Autoconf, scons, Marke, MSBuild, VCBuild, Boost-Jam, CMake, NMake, und QMake sind Beispiele. Außerdem haben viele C-und C++ - Entwickler generieren von code mit tools wie Yacc und Bison.
Maven und NuGet-arbeiten, wie Sie tun, weil Sie Unterstützung ökosysteme mit (relativ) wenig variation in build-tools. Ant in Maven Fall, MSBuild NuGet-Fall. Aufbau eines ähnlichen Systems für die Arbeit mit der Vielzahl von C++ - build-Systeme im Einsatz wäre undurchführbar und unpraktisch (angesichts der scheinbaren Mangel an Nachfrage nach solchen Systemen).
pkg-config
.Habe ich gearbeitet, auf eine cross-Plattform und cross-Architektur verteilte Paket-manager. Alle Pakete installiert sind, in das Projekt-Verzeichnis (ein bisschen wie, wie nodejs-funktioniert). Es ist ein work in progress.
Es ist Daveed Modul-Vorschlag, welche es nicht in C++0x.
pkg-config
.pkg-config
zeigt, dass ein Paket-manager muss nicht C++1y-Module. Es sei denn durch das Sie haben nicht, dass ein Paket-manager, aber Billy ' s Kommentar.@Billy:
. der gute Billy sagte: "Module sind...", und ich sagte, das hängt von der Modul-Konzept. einige Menschen, vor allem C-Programmen, die denken, ist eine Funktion ein Modul. einige Leute, z.B. Betrand Meyer, denkt eine Klasse ist ein Modul. einige Leute, z.B. Niklaus Wirth, denkt Modula-Modul (oder Pascal-unit oder Ada-Paket) ist ein Modul. einige Leute, z.B. Daveed, denkt, dass eine Bibliothek in einem Modul. und so weiter. jedoch, dort ist kein Platz hier auf SO Leute zu erziehen. also ich Stand gerade der Kern der WahrheitEs ist CoApp, das scheint an den Microsoft support.
ryppl scheint, zu tun, was Sie benötigt, und mehr, die cross-Plattform:
Bereits spielte Sie auf GitHub: https://github.com/ryppl/ryppl