Gestion des dépendances de type Maven pour C ++?

Disons que j’ai un projet C ++ qui est divisé en plusieurs sous-projets. Le sous-projet produit tous une DLL et différentes équipes de développeurs travaillent sur chacun des sous-projets. Maintenant, si je veux construire le projet principal, y a-t-il un moyen d’éviter d’avoir à créer tous les sous-projets par moi-même?

En bref, je cherche quelque chose qui fait la gestion des dépendances (c.-à-d. Pour les fichiers binarys et les en-têtes) de la même manière que Maven pour Java.

En fait, j’ai essayé d’utiliser Maven pour cela, mais c’est assez encombrant car je dois créer les paquets manuellement et assez souvent, Maven manque de relever les dernières modifications. De plus, l’exécution de la compilation est un peu un hack car je dois appeler NAnt depuis Maven (j’utilise la fonctionnalité de NAnt pour créer directement des solutions Visual Studio).

Des astuces et des idées sur la façon de procéder?

Réponse initiale : Je suggère d’utiliser CMake. C’est un générateur de fichiers de compilation multi-plateforme (génère également des projets CDT Visual Studio ou Eclipse).

http://www.cmake.org/

J’ai fait une très bonne expérience avec ça. La meilleure chose que j’aime à ce sujet est la capacité à produire une structure de projet générique. Vous pouvez donc inclure de manière générique la recherche de sous-projets pour les tests unitaires, etc. sans changer le script à chaque fois.

Ils ont aussi beaucoup de modules sur la façon de trouver des bibliothèques de build préinstallées, nécessaires pour le projet (comme Boost, QT etc.)


Mise à jour : Entre-temps, des efforts ont été déployés pour introduire la gestion des paquets pour C ++. Quelques projets à considérer:

  • conan.io s’intègre avec les principaux outils de construction:
    • CMake
    • Visual Studio
    • Makefile
    • XCode
  • cpm basé sur CMake

Remarque: comme indiqué par @RAM dans les commentaires, cpm n’est plus activement maintenu.

Pour la gestion des dépendances, il existe un nouveau projet (c’est une start-up) qui implémente ce type d’outil: https://www.biicode.com/ (un gestionnaire de dépendances C ++). Vous pouvez append vos dépendances et cela devrait fonctionner.

Actuellement, le projet s’appelle conan.io , ils ont été acquis par JFrog .

MISE À JOUR: Le projet est mort … Malheureusement, il semble que le démarrage ne pourrait pas avoir suffisamment de clients payants, mais le serveur semble fonctionner correctement …

UPDATE2: Il semble qu’il y ait un projet de remplacement: conan.io (merci @mucaho)

Je recommande les systèmes de construction de haut niveau suivants:

  • Maven Nar Plugin: Utiliser Maven pour les projets C / C ++
  • Gradle cpp plugin : C’est un moyen plus facile, mais il est en train d’incuber, ici les principales caractéristiques et une feuille de route .
  • Conan est plus une approche C ++, il est multi-plateforme et prend en charge les systèmes de construction C ++ les plus courants.

Si vous ne voulez que la gestion des dépendances, essayez Ivy , il s’intègre bien avec Ant (et je suppose que NAnt peut faire la même chose sur ce blog , qui est lié au site Ivy).

Il y a aussi Byldan , une version .Net de Maven. Je ne sais pas si cela fonctionnera pour vous si.

Make et GCC sont une excellente combinaison pour une très bonne vérification des dépendances.

GCC peut générer automatiquement des fichiers de dépendance «make» (commutateur de ligne de commande -MD), afin de pouvoir reconstruire tous les fichiers sources qui dépendent d’un en-tête donné, par exemple.

J’ai quelques règles simples que je découpe dans mes makefiles:

# comstack c files %.o: %.c ${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o $@ # compile c++ files %.opp: %.cpp ${CPP} ${CPPFLAGS} -c $< -MD -MF $(<:%.cpp=%.dep) -o $@ 

Maintenant, si vos fichiers objects sont déclarés par exemple dans une liste OBJ_C et une liste OBJ_CPP:

 .PHONY: cleandep cleandep: rm -f $(OBJ_C:%.o=%.dep) $(OBJ_CPP:%.opp=%.dep) -include $(OBJ_C:%.o=%.dep) $(OBJ_CPP:%.opp=%.dep) 

Bien entendu, il est possible de suivre les dépendances avec d’autres projets, par exemple, en reconstruisant également une librairie partagée.

Par exemple, si vos autres équipes placent toujours leurs dernières DLL sur un dossier partagé:

 myapp: ${SRC_CPP} ${LIB_DIR}other_team.lib ... ${LIB_DIR}other_team.lib: /shared_folder/latest/other_team.lib cp /shared_folder/latest/other_team.lib ${LIB_DIR}other_team.lib 

Récemment publié: biicode Un outil multi-plateforme et un service d’hébergement pour les développeurs

Modifier:

Biicode est déconseillé

Alternative: Conan.io

Je recommande conan , que j’utilisais ces jours-ci. Il est très puissant de gérer toutes les bibliothèques et tous les fichiers binarys dépendants de votre projet.

Vous pouvez créer un package NuGet pour les bibliothèques utilisées et utiliser NuGet pour la gestion des dépendances.

Voir aussi NuGet pour C ++

Il existe un certain nombre d’outils au-dessus des SCons, fournissant des fonctionnalités de niveau supérieur similaires à celles des Autotools, qui tentent de faciliter la vie des développeurs (par exemple, WAF, SNOCS). Malheureusement, SCons lui-même a l’inconvénient majeur – plus de temps de compilation pour les grands projets.

Je peux recommander d’essayer SNOCS (qui est un SCons inversé) pour ceux qui recherchent une gestion facile des dépendances et choisissent les options de compilation dans une seule commande (compilateur, x86 / x64, Debug / Release, bibliothèques statiques / partagées, test / installer des cibles, etc.).

SNOCS tente également de résoudre le problème du long temps de compilation en stockant la sortie de configuration des projets dans des fichiers distincts, ce qui permet aux versions suivantes de sauter complètement la phase de configuration et de passer directement à la phase de construction (la dernière fonctionnalité est en construction).

La configuration de CMake devient fastidieuse dans les solutions plus grandes, de sorte que la maintenance du système de construction prend une grande partie du temps du développeur. Heureusement que Martijn a déjà mentionné, il y a biicode qui “utilise CMake pour générer votre projet avec ses dépendances”.

Essayez les SCons

SCons est un outil de construction de logiciels Open Source, c’est-à-dire un outil de génération de nouvelle génération. Considérez SCons comme un substitut multiplate-forme amélioré de l’utilitaire classique Make avec des fonctionnalités intégrées similaires à celles des caches autoconf / automake et du compilateur tels que ccache. En bref, SCons est un moyen plus simple, plus fiable et plus rapide de créer des logiciels.

Je recommande d’utiliser la mère de tous les systèmes de dépendance de construction: make.

Essayez les scons, vous serez accro. Make est obsolète, difficile et coûteux à entretenir.