47 votes

Des efforts sont-ils faits pour créer un gestionnaire de paquets pour C++ ?

L'une des plus grandes frustrations que j'éprouve à l'égard de mon langage favori est l'effort qu'il faut déployer pour que différentes bibliothèques fonctionnent ensemble dans un environnement de développement unifié. Mon plus grand souhait est de pouvoir dire à mon IDE, ou autre, que j'ai besoin d'une certaine bibliothèque, et il se charge de la télécharger, de la compiler (si nécessaire), de l'installer, puis de configurer les chemins d'inclusion et de bibliothèque.

Ce que je veux, c'est este mais pour C++. Je préférerais qu'il fonctionne avec Visual Studio, mais gcc est également acceptable. Ou si c'est un système séparé, c'est bien aussi. Il doit cependant fonctionner sous Windows.

Quels projets prometteurs existent pour résoudre ce problème ?

18voto

nurettin Points 4083

Avez-vous envisagé d'utiliser Git comme gestionnaire de paquets ? J'ai utilisé des submodules git pour les dépendances et sous-dépendances et, combiné à des services d'hébergement git gratuits, l'idée est assez puissante.

Il suffit d'aller dans votre projet git,

git submodule add git://somehosting.com/you/package.git
git submodule init package
git submodule update package
cd package && ./configure --stuff && make && cd ..

Pour sélectionner des versions de dépendances particulières,

cd package && git checkout v3.2 && cd .. && git add package/
git commit -am "package version 3.2 pinned" && git push

Vous avez maintenant associé la dépendance de votre paquet à une balise particulière et enregistré vos paramètres dans le référentiel de votre projet. La prochaine fois que quelqu'un le fera :

git pull && git submodule update

La dépendance de leur paquet sera également fixée à la v3.2.

Certains systèmes de gestion de paquets proposent également des paquets signés. Git vous permet de Signer vos tags avec GPG et permet aux gens de le vérifier en ajoutant votre clé publique à leur trousseau de clés.

Nous avons donc le téléchargement de paquets, les versions de dépendances et nous pouvons émuler la "signature de paquets". Il ne manque que les binaires pré-construits qui, à mon avis, ne sont pas une nécessité absolue. Une autre partie manquante est la gestion globale des paquets. Vous devrez gérer manuellement chaque dépôt git lorsqu'une dépendance d'une dépendance est mise à jour.

8voto

JKor Points 1869

À partir de NuGet 2.5, NuGet prend en charge les projets natifs . Cependant, la création d'un paquetage à la main est assez complexe, c'est pourquoi ils suggèrent d'utiliser les outils Powershell de CoApp pour NuGet ( documentation ici ). Grâce à ces outils, vous pouvez désormais héberger vos paquets C/C++ sur NuGet.

7voto

Billy ONeal Points 50631

Il est peu probable que cela se produise simplement parce que les différentes bibliothèques C++ utilisent souvent des systèmes de construction TRÈS différents. Autoconf, scons, make, MSBuild, VCBuild, Boost Jam, CMake, NMake, et QMake en sont des exemples. De plus, de nombreux développeurs C et C++ génèrent du code avec des outils comme Yacc et Bison.

Maven et NuGet fonctionnent comme ils le font parce qu'ils prennent en charge des écosystèmes dont les outils de construction varient (relativement) peu. Ant dans le cas de Maven, MSBuild dans le cas de NuGet. Construire un système similaire pour fonctionner avec le vaste éventail de systèmes de construction C++ utilisés serait infaisable et peu pratique (étant donné l'absence apparente de demande pour de tels systèmes).

5voto

Eran Points 549

Si vous utilisez MinGW, il existe déjà un gestionnaire de paquets similaire à apt-get / aptitude qui fait ce que vous voulez : mingw-get

Il se comporte de manière similaire à apt-get/aptitude de Debian. Parmi les paquets déjà inclus, vous trouverez expat, libxml2, zlib, pthread, etc.

Évidemment, vous aurez besoin d'une copie de MinGW pour commencer à travailler avec elle.

2voto

Il y a Proposition de module de Daveed qui n'a pas été intégré à C++0x.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X