it-swarm.com.de

C++ wie man Abhängigkeiten verwaltet (z. B. Bibliotheken von github verwenden)

Ich bin sehr neu in der C++ - Welt, also bitte entschuldigen Sie mich für eine solche Dummy-Frage. Ich google ein wenig, konnte aber keine richtige Antwort finden.

Meine Frage ist ziemlich einfach - wie soll ich lib in der C++ - Welt verwenden? In Java gibt es beispielsweise maven und gradle für diese Aufgabe. In Python benutze ich pip. In Javascript machen npm und bower das ganze Zeug. In C # verwenden Sie nuget oder fügen Ihrem Projekt einfach DLL lib hinzu. Aber in C++ sieht es nicht so einfach aus.

Ich habe ein Werkzeug namens conan gefunden, aber die Anzahl der vorhandenen Bibliotheken ist ziemlich klein und enthält nichts, wofür ich mich interessiere.

So zum Beispiel - ich möchte nlp lib meta verwenden. Es scheint so, als würden sie keine Installationsdatei bereitstellen. Ich nehme an, ich brauche Quellen von Github. Soll ich sie kompilieren und dann versuchen, kompilierte Dateien zu meinem Projekt hinzuzufügen, oder muss ich den lib-Ordner in meinem Projekt haben und meta's-Quellen in diesen Ordner legen und danach mit meta's-Quellen arbeiten, wie sie in meinem Projekt sind?


Meine Frage betrifft nicht die Installation bestimmter meta lib, sondern mehr aus Sicht der Quellverwaltung. Wenn ich beispielsweise Visual Studio für Windows verwende, mein Colegue jedoch Clion unter Linux codiert. Und ich möchte nicht verstehen, wie man Abhängigkeiten in der C++ - Welt richtig verwaltet.

13
silent_coder

Cget installiert jedes Paket, das Standard-Cmake verwendet und für Linux und Windows funktioniert. Es hat eine kürzere Syntax, um Pakete direkt von github zu erhalten (wie cget install google/googletest).

Darüber hinaus können Abhängigkeiten auch automatisch heruntergeladen werden, indem sie in einer requirements.txt-Datei aufgelistet werden.

Es gibt auch Rezepte für die Installation von nicht-cmake-Paketen und das Repository hier hat über 300 Bibliotheken (und wächst). So können Sie curl einfach mit cget install pfultz2/cget-recipes curl installieren.

4
Paul Fultz II

C++ hat nichts wie pip oder npm/bower. Ich weiß nicht, ob maven oder gradle für die Verarbeitung von C++ - Bibliotheken überzeugt werden kann.

Im Allgemeinen müssen Sie mit enden

  • Header-Dateien in einem Verzeichnis irgendwo
  • bibliotheksdateien (entweder statische Bibliotheken oder DLLs/Shared Objects). Wenn es sich bei der Bibliothek nur um eine Kopfbibliothek handelt, wie in einigen der Boost-Bibliotheken, benötigen Sie dies nicht.

Sie erhalten die Bibliotheksdateien, indem Sie sie entweder auf Ihrem Computer installieren (typisch für Open Source-Projekte und auf Linux-Plattformen ausgerichtete Projekte), oder indem Sie die vorkompilierten Binärdateien herunterladen (typisch für Windows-Bibliotheken, insbesondere kostenpflichtig).

Hoffentlich werden die Anweisungen zum Erstellen der Bibliothek auf der Bibliotheks-Website enthalten sein. Wie in den Kommentaren erwähnt, scheint "Meta" dabei recht gut zu sein.

Wenn Sie versuchen, mit der Bibliothek zu kompilieren, benötigen Sie möglicherweise eine Befehlszeilenoption (z. B. -I), um das Verzeichnis anzugeben, in dem sich die Header-Dateien befinden. Möglicherweise benötigen Sie eine Linkeroption (z. B. -l), um den Linker anzuweisen, eine Verknüpfung mit Ihrer Bibliothek herzustellen.

3
Martin Bonner

C++ hat leider keinen Paketmanager für Bibliotheken. Einige sind da draußen und versuchen, einer zu sein, der noch klein und zerstreut ist (wie Conan).

In Linux gibt es einige "-dev" -Pakete, die Sie installieren können, aber sie sind auch nicht "alle".

Sie werden sie höchstwahrscheinlich selbst herunterladen. Als nächstes haben Sie das Problem, diese Bibliotheken zu integrieren. Sie haben unterschiedliche Build-Systeme pro Betriebssystem, so dass Sie sehen müssen, wie Sie C++ - Dateien erstellen. 

Wie in Windows mit Visual Studio müssen Sie ein Visual Studio-Projekt oder ein mit nmake kompatibles Makefile erstellen, um die Bibliotheken zu erstellen und sie dann Ihrem Projekt hinzuzufügen. Gleiches gilt für Linux-Makefiles.

Es gibt mehrere Build-Frameworks mit höherer Ebene wie cmake. Das Beispiel, das Sie in Ihrem Beitrag haben, funktioniert auch mit CMake. Die Integration in eine cmake-Build-Umgebung wäre daher einfacher, dies gilt jedoch nur für andere Bibliotheken, die ebenfalls CMake-Build-Umgebungen verwenden/integrieren möchten (beispielsweise tut boost/qt dies).

Ja, das sind einige Gedanken dazu. Leider gibt es keine einfache/endgültige Antwort darauf, da es kein echtes zentrales C++ - Paket-Repository gibt, das ebenfalls in ein Build-System integriert ist.

3
Hayt

Es scheint mir, dass das Crascit/DownloadProject in Ihrer Situation hilfreich sein könnte. Es enthält CMake-Plugins zum Herunterladen von Projekten aus einem git-Repository, indem Sie tags usw. angeben. Dann können Sie mit add_custom_target Befehle ausführen, die Sie zum Erstellen des Projekts benötigen.

2
Max Levy

Es gibt eine Reihe populärer C++, die über nuget-Pakete veröffentlicht werden . Sie können in der Galerie danach suchen, normalerweise mit den Tags native oder c++ . Offensichtlich benötigen Sie einen Nuget-Manager für Ihr Betriebssystem, und ich bin mir ziemlich sicher, dass die C++ - Nuget-Pakete für eine Menge Grunzerarbeit auf MSBuild angewiesen sind, so dass Sie möglicherweise Schwierigkeiten haben, ein nicht auf Visual Studio ausgerichtetes Setup zu erhalten.

Auch Gradle unterstützt tatsächlich native Abhängigkeiten . Ich habe mir das vor einiger Zeit angesehen, aber die Arbeit daran wurde eingeschränkt, weil die Unterstützung für VS 2015 fehlte.

0
Dennis