Hat C ++ einen Paketmanager wie npm, pip, gem usw.? [geschlossen]

72

Ich frage mich nur, wie ich cpp-Pakete am besten installieren kann. Mein Hintergrund ist in JS / Ruby / etc, also scheint es so seltsam, dass es keine cpmoder ähnliches gibt. Was vermisse ich? Ich nehme an, es ist nicht so einfach ...

Zum Beispiel kann ich nicht einmal eine CPP-Datei ausführen, #include <iostream>wenn ich sie bekommefatal error: 'iostream' file not found

Aus Gründen der Übersichtlichkeit bearbeiten : iostreamWar ein schlechtes Beispiel, meine Systemkonfiguration wurde zurückgewonnen, als ich dies schrieb. Ersetzen Sie es in Ihrer Fantasie durch eine nicht standardmäßige Bibliothek.

Elzi
quelle
6
iostreamIst der Standard-Bibliotheksheader, muss er vorhanden sein, wenn Sie den C ++ - Compiler installiert haben. Wenn Sie es vermissen, stimmt etwas mit Ihrem Setup nicht.
9.
2
Nein, die C ++ - Sprachspezifikation erfordert weder Pakete noch Paketmanager. In der C ++ - Spezifikation gibt es kein Konzept für Pakete.
Thomas Matthews
1
Das Konzept des Packens wird normalerweise dem Compiler oder der IDE überlassen.
Thomas Matthews
1
Ich habe gerade angefangen, mich in C zu entwickeln und habe den gleichen Hintergrund wie Sie. Es ist wirklich seltsam, dass öffentliche C-Bibliotheken nicht in einem zentralen Repository gesammelt werden.
Benedikt

Antworten:

53

Es scheint einige zu geben, obwohl ich sie nie benutzt habe.

dds https://github.com/vector-of-bool/dds

cpm http://www.cpm.rocks/

conan https://conan.io/

pacm http://sourcey.com/pacm/

spack https://spack.io

Buckaroo http://buckaroo.pm

Jäger https://github.com/ruslo/hunter

vcpkg https://github.com/Microsoft/vcpkg

user3071643
quelle
2
Hat sich seit 2016 etwas geändert? Welcher Paketmanager wird derzeit am häufigsten verwendet und standardisiert? Was verwenden C ++ - Entwickler stattdessen, um Abhängigkeiten zu behandeln?
Filip Š
2
Die Module werden in C ++ 20 sein, daher würde ich zu diesem Zeitpunkt einen neuen Paketmanager erwarten.
user3071643
Danke, gut zu wissen. Aber wie geht das Projekt derzeit mit Abhängigkeiten um? Ich habe einige Pakete gesehen, bei denen Abhängigkeiten manuell installiert werden müssen, möchte aber wissen, ob es auch andere Optionen gibt.
Filip Š
Ab August 2020 scheint cpm gesunken zu sein. Die Paketverwaltungslösungen im C ++ - Bereich lassen definitiv zu wünschen übrig.
Regan Koopmans
38

Conan ist heute der klare Gewinner, basierend auf seinen über 36 GitHub-Mitwirkenden und der Tatsache, dass ich fand, dass die Dokumentation zu den ersten Schritten einfach genug ist, um mit der Arbeit zu beginnen. Es ist auch MIT lizenziert .

Conans Dokumentation vergleicht es sogar mit einem Biicode, von dem ich überrascht war, dass er in anderen Antworten nicht erwähnt wurde, aber der Biicode scheint ähnlich wie cpm aufgegeben zu werden .

pacm hat einige Aktivitäten, ist aber LGPL, was bei einigen Projekten ein Problem sein kann.

Dies baut auf der Antwort von user3071643 auf , danke!

pzrq
quelle
24

Nein, es gibt sicherlich keinen offiziellen Paketmanager für C / C ++, aber ich werde Ihnen ein paar Vorschläge geben, um Ihre Tage hoffentlich besser zu machen.

Zunächst würde ich vorschlagen, CMake oder GENie zu untersuchen auf Möglichkeiten zu untersuchen, Bibliotheken auf erweiterbare und plattformübergreifende Weise in Ihr Build-System zu integrieren. Beide gehen jedoch davon aus, dass Sie Bibliotheken haben, die sich an einem "leicht zu findenden" Ort befinden, oder dass sie dasselbe Build-System wie Ihr Projekt haben. Es gibt Möglichkeiten, beiden beizubringen, wie Sie die benötigten Bibliotheken finden. Alle anderen Lösungen sind plattformspezifisch.

Wenn Sie Node.js oder Haxe in Ihrem Projekt haben, haben sowohl npm als auch haxelib Möglichkeiten, C ++ (in einer vorkompilierten DLL / so-Form) aus JavaScript bzw. Haxe zu verwenden, aber das ist eine große und wahrscheinlich falsche Annahme dass Sie Node.js oder Haxe in einem Projekt verwenden würden, das wirklich die Vorteile benötigt, die C / C ++ bieten kann.

Für die Microsoft-Welt glaube ich, dass NuGet einige C ++ - Bibliotheken hat , obwohl es in seiner Plattformunterstützung auf Visual Studio und wahrscheinlich Windows beschränkt ist, aber es passt wahrscheinlich am besten zu dem, was Sie unter "Paketsystem" verstehen, wenn Sie Ihre Beispiele verwenden (vorausgesetzt, Sie haben es gemeint dass cpm ein C Package Manager war, so wie npm Node Package Manager ist).

In der Linux-Welt fungieren rpm, yum und apt-get technisch genauso wie C / C ++ - Entwicklungspaketmanager wie Systempaketmanager. Im Gegensatz zu npm müssen Sie Pakete jedoch immer global installieren. Wenn es sich um eine Linux-App handelt, die sich wahrscheinlich in einem Paket auf einem oder mehreren dieser Manager befindet und in Paketen eine Abhängigkeitsliste eingebettet ist, ist dies kein großes Problem.

Für die MacOS / iOS-Welt gibt es CocoaPods, aber wie bei NuGet sind Sie an die Apple-Plattform gebunden. Es gibt immer MacPorts , wenn Sie mit dem Paketmanager im Linux-Stil als Entwickler-Paketmanager zufrieden sind, wie im vorherigen Absatz beschrieben.

Ich möchte diese npm, lokale Installation, eine Art plattformübergreifende Funktionalität, aber da C / C ++ auf so vielen Plattformen verwendet wird (alle?) Und C / C ++ - Programmierer wie ich dazu neigen, ihre eigenen zu rollen. .. alles, was uns alle (unnötig?) beschäftigt, gab es nicht viel Druck, ein solches Projekt zu machen, was eine Schande ist. Vielleicht solltest du eins machen? Es würde sicherlich meine Tage besser machen.

AKTUALISIEREN

Conan ist der C / C ++ - Paketmanager, den wir uns alle gewünscht haben. Es verfügt sowohl über lokale als auch über globale Server und eignet sich daher sowohl für Business- als auch für Open Source-Pakete. Es ist jung und sein globales Repository enthält nicht sehr viele Pakete. Wir sollten alle daran arbeiten, Pakete hinzuzufügen!

UPDATE 2

Ich habe festgestellt, dass vcpkg für Windows und Android sehr nützlich war. Wenn Sie nicht darüber hinwegkommen können, dass Conan.io in Python geschrieben ist, ist es möglicherweise einen Blick wert.

Obwohl es vorschreibt, dass Sie es für sich selbst und alle Ihre Abhängigkeiten verwenden, glaube ich, dass Build 2 in ein paar Jahren der ultimative Gewinner sein sollte, aber zum Zeitpunkt des Schreibens steht es noch bevor.

Jay
quelle
1
OSX hat Homebrew, aber dies wird normalerweise verwendet, um bereits erstellte Software wie MySQL, Apache, Nginx oder Dinge wie Node.js oder Python herunterzuladen. Also, das ist wie Linux
Apt
1
Warum erwähnen Sie Node? Schlagen Sie vor, dass Sie die C ++ - Bibliothek, die Sie verwenden möchten, mit einem Node-Wrapper über npm installieren können?
Dana Fall
1
@ DanaCase Ja, genau das sage ich. Node.js wird manchmal als äußere Hülle eines Projekts oder einer Anwendung verwendet, und die Teile, die für die Geschwindigkeit die niedrigste Steuerung benötigen, werden in C / C ++ oder Rust in einer dynamischen Bibliothek / einem gemeinsam genutzten Objekt geschrieben. Electron-Apps sind im Grunde Node.js-Apps mit einem Webbrowser für die Benutzeroberfläche. Wenn Geschwindigkeit erforderlich ist, wird entweder eine WASM-Bibliothek oder eine native dynamische Bibliothek / ein freigegebenes Objekt aus Javascript geladen und verwendet. So kompilieren Sie Ihre dynamische Bibliothek / Ihr freigegebenes Objekt nativ: Für Rust können Sie Neon verwenden, das in Cargo integriert ist. Für C / C ++ können Sie Node-Gyp verwenden.
Jay
1
Um klar zu sein, kommen in npm der "Wrapper" und die C / C ++ / Rust-Bibliothek normalerweise in Quellform zu Ihnen. Aus diesem Grund werden Sie bei der Installation von Node.js unter Windows auch aufgefordert, einen C / C ++ - Compiler zu installieren, damit dieser ordnungsgemäß funktioniert (die am häufigsten verwendeten nativen Bibliotheksprojekte sind in C / C ++ geschrieben).
Jay
11

Die anderen Antworten haben die konkurrierenden Lösungen erwähnt, aber ich dachte, ich würde meine Erfahrungen hinzufügen. Ich habe einige Nachforschungen über Paketmanager angestellt und Systeme für $ WORK erstellt. Wir waren auf der grünen Wiese, also war alles auf dem Tisch. Das sind meine Erkenntnisse, YMMV.

Conan

Behauptet, jedes Build-System zu unterstützen, aber Sie müssen diese Python-Skripte schreiben, um Conan mitzuteilen, wie Ihr Build funktioniert. Viel Magie und leicht falsch zu konfigurieren. Sie müssen auch Fernbedienungen, lokale Fernbedienungen usw. mit conan create verwalten. Wir wollten etwas Einfaches und das hat mich abgeschreckt. Die IDE-Integration funktionierte nicht zuverlässig (aufgrund der Python-Skripte). Ich fragte nach reproduzierbaren Builds und sie sagten, es sei so reproduzierbar, wie Sie es machen möchten. Es ist also nicht wirklich reproduzierbar.

https://conan.io/

Jäger

Alle Pakete werden in einem einzigen Repository definiert. Sie müssen sich verzweigen, um Pakete hinzuzufügen. Alles wird von CMake gesteuert. Wir möchten CMake intern aufgrund schlechter Syntax, nicht reproduzierbarer Builds und all der anderen Probleme, die Sie wahrscheinlich bereits kennen, ablehnen. Hunter bietet reproduzierbare Installationen von Paketen an, da Sie Hunter in die Quellcodeverwaltung versetzen, was ausgezeichnet ist.

https://github.com/ruslo/hunter

Buckaroo

Meinung, aber einfachste Lösung. Keine Notwendigkeit, Fernbedienungen oder Gabeln von Paketlisten zu verwalten, da alle Pakete nur Git-Repos sind. Wir verwenden GitHub privat, daher war dies ein Plus für uns. Wir waren etwas zögerlich bei der Verwendung des Buck-Build-Systems, das sie benötigen. Es stellte sich heraus, dass Buck die meisten Dinge richtig macht (ich habe Meson & Bazel in der Vergangenheit benutzt und gemocht), und das Schreiben von Buck-Dateien war sowieso weniger Arbeit als das Integrieren von CMake-Projekten. Außerdem, und das war groß für uns, unterstützt Buckaroo auch Java. Die Unterstützung von Maven war allerdings hacky. Wir konnten iOS- und Android-Builds mit einem einzigen Build-Tool / Paket-Manager erstellen. Die Dokumentation ist schlecht, aber sie haben auf meine E-Mails reagiert. Benötigt mehr Pakete.

https://buckaroo.pm/

VCPKG

Ähnlich wie Hunter, aber von Microsoft. Sie haben keine älteren Versionen von Paketen, die ein Problem darstellen könnten. Wiederum wird alles in CMake erledigt, sodass Builds mit der Zeit komplexer und langsamer werden. Ich denke, VCPKG hat die meisten Pakete aller Lösungen.

https://github.com/Microsoft/vcpkg

undefined_behavior20
quelle
1

Nein, es gibt keinen Paketmanager für C ++ - Bibliotheken. Wie bei jeder anderen Software gibt es verschiedene Möglichkeiten, C ++ - Bibliotheken zu installieren: über den Paketmanager Ihres Betriebssystems, durch Erstellen aus einem Quell-Tarball oder bei proprietärer Software durch Ausführen eines Installationsprogramms.

Beachten Sie, dass #include <iostream>Ihr Compiler oder Ihre Entwicklungsumgebung einfach nicht korrekt installiert ist , wenn dies nicht funktioniert. Ich glaube, Super User ist die Seite, auf der Sie um Hilfe bitten können.

Brian
quelle