web-dev-qa-db-fra.com

C++ comment gérer les dépendances (utiliser les bibliothèques de github par exemple)

Je suis très nouveau dans le monde C++, alors veuillez m'excuser pour cette question factice. J'ai un peu google, mais je n'ai pas trouvé de réponse adéquate.

Ma question est assez simple: comment utiliser lib dans le monde C++. Par exemple, en Java, il existe maven et gradle pour cette tâche. En Python - J'utilise pip. En javascript npm et bower faire tout le travail. En C #, vous utilisez nuget ou vous ajoutez simplement DLL lib à votre projet. Mais on dirait qu'en C++, les choses ne sont pas si faciles.

J'ai trouvé un outil appelé conan mais le nombre de bibliothèques dont ils disposent est assez petit et n'inclut pas ce que je cherche.

Ainsi, par exemple, je veux utiliser nlp lib meta . On dirait qu'ils ne fournissent aucun fichier d'installation. Je suppose donc que je dois obtenir les sources de github. Devrais-je les compiler et ensuite essayer d'ajouter des fichiers compilés à mon projet ou je dois avoir un dossier lib dans mon projet, et mettre des sources meta's dans ce dossier et ensuite utiliser les sources meta's telles qu'elles sont dans mon projet?


Ma question ne concerne pas la façon d'installer une meta lib spécifique, mais davantage du point de vue de la gestion de la source. Si j'utilise Visual Studio sur Windows par exemple, mais que mon collègue codera Clion sous Linux. Et je ne réaliserai pas quel est le bon moyen de gérer les dépendances dans le monde C++.

13
silent_coder

Cget installera tous les paquetages utilisant cmake standard et fonctionnant sous linux et windows. Il a une syntaxe raccourcie pour obtenir les paquets directement à partir de github (tel que cget install google/googletest).

En outre, les dépendances peuvent également être téléchargées automatiquement en les répertoriant dans un fichier requirements.txt.

Il y a aussi des recettes pour installer des paquets non-cmake et le dépôt ici a plus de 300 bibliothèques (et en croissance). Vous pouvez donc installer curl avec seulement cget install pfultz2/cget-recipes curl.

4
Paul Fultz II

C++ n'a rien de tel que pip ou npm/bower. Je ne sais pas si maven ou gradle peut être persuadé de gérer les bibliothèques C++.

En général, vous allez devoir vous retrouver avec

  • Fichiers d'en-tête dans un répertoire quelque part
  • fichiers de bibliothèque (bibliothèques statiques ou DLL/objets partagés). Si la bibliothèque est une bibliothèque contenant uniquement des en-têtes, à l'instar de certaines des bibliothèques boost, vous n'en aurez pas besoin.

Vous obtenez les fichiers de bibliothèque, soit en les construisant sur votre machine (typique pour les projets open source, et ceux destinés aux plates-formes Linux), soit en téléchargeant les fichiers binaires précompilés (typiques pour les bibliothèques Windows, particulièrement payantes).

Espérons que les instructions pour la construction de la bibliothèque seront incluses sur le site Web de la bibliothèque. Comme indiqué dans les commentaires, "méta" semble être assez bon à cela.

Lorsque vous essayez de compiler avec la bibliothèque, vous aurez peut-être besoin d'une option de ligne de commande (par exemple, -I) pour spécifier le répertoire contenant les fichiers d'en-tête, ainsi que d'une option d'éditeur de liens (par exemple, -l) pour indiquer à l'éditeur de liens de créer des liens avec votre bibliothèque.

3
Martin Bonner

C++ n’a malheureusement pas de gestionnaire de paquets pour les bibliothèques. Certains sont là-bas et essaient d'en être un qui soit encore petit et dispersé (comme le conan).

Sous Linux, vous pouvez installer des paquets "-dev" mais ils ne sont pas non plus "tous".

Vous finirez probablement par les télécharger vous-même. Ensuite, vous avez le problème de l’intégration de ces bibliothèques. Vous avez différents systèmes de construction par système d'exploitation, vous devez donc voir comment vous construisez les fichiers c ++. 

Comme dans Windows avec Visual studio, vous devez obtenir un projet Visual Studio ou un fichier makefile compatible avec nmake pour créer les bibliothèques, puis les ajouter à votre projet. Même chose avec les makefiles de Linux.

Il existe plusieurs structures de construction de niveau supérieur, telles que cmake. L'exemple que vous avez dans votre message fonctionne également avec CMake. Il serait donc plus facile d’intégrer celui-ci dans un environnement de construction de cmake, mais cela ne s’appliquera qu’aux autres bibliothèques qui essaient également d’utiliser/d’y intégrer des environnements de construction de cmake (par exemple, boost/qt le fait).

Oui, voici quelques réflexions à ce sujet. Malheureusement, il n'y aura pas de réponse facile/définitive à cette question car il n'y a pas de véritable référentiel de paquets c ++ central qui soit également intégré dans un système de construction.

3
Hayt

Il me semble que le Crascit/DownloadProject pourrait être utile dans votre cas. Il fournit des plug-ins CMake pour le téléchargement de projets à partir d'un référentiel git en spécifiant tags, etc. Vous pouvez ensuite utiliser add_custom_target pour exécuter les commandes nécessaires à la construction du projet.

2
Max Levy

Il existe un certain nombre de C++ populaires publiés via nuget packages . Vous pouvez les rechercher dans la galerie, en utilisant généralement les balises native ou c++ . De toute évidence, vous avez besoin d’un gestionnaire de pépites pour votre système d’exploitation, et je suis à peu près sûr que les packages de pépites C++ reposent sur MSBuild pour une bonne partie du travail fastidieux. Vous aurez donc peut-être du mal à faire fonctionner correctement une installation non orientée Visual Studio.

De plus, Gradle supporte également les dépendances natives . J'ai jeté un coup d'œil il y a quelque temps, mais le travail à ce sujet a été réduit, car le support pour VS 2015 faisait défaut.

0
Dennis