Disons que j'ai un projet C ++ divisé en plusieurs sous-projets. Les sous-projets produisent 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 à construire tous les sous-projets par moi-même?
En bref, je recherche quelque chose qui fait la gestion des dépendances (c'est-à-dire pour les fichiers binaires et les en-têtes) de la même manière que Maven le fait pour Java.
En fait, j'ai essayé d'utiliser Maven pour cela mais c'est plutôt encombrant car je dois créer les packages manuellement et assez fréquemment, Maven manque de récupérer les modifications les plus récentes. De plus, exécuter 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 conseils et des idées sur la façon de procéder?
la source
maven
, vous manquez tout le pointmaven
, ou il y a 10 ans, quand je n'utilisais pasmaven
pour C ++, c'était beaucoup moins utile pour C ++. Je ne peux pas parler pour 2009, mais ces dernières années, par expérience,maven
c'est exactement ce que vous utiliseriez pour le problème que vous décrivez. Il fait exactement ce que vous voulez, de manière assez efficace et bien, et ne fait pas les choses négatives que vous prétendez faire. Toute personne lisant ceci en 2019 ou plus tard devrait fortement envisager de l'utilisermaven
à cette fin.Réponses:
Réponse initiale : Je suggérerais d'utiliser CMake. Il s'agit d'un générateur de fichiers de création multi-plateforme (génère également des projets Visual Studio ou Eclipse CDT).
http://www.cmake.org/
J'ai fait une très bonne expérience avec. Ce que j'aime le plus, c'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 également de nombreux modules sur la façon de trouver des bibliothèques de construction 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 packages pour C ++. Quelques projets à regarder:
Remarque comme indiqué par @RAM dans les commentaires cpm n'est plus activement maintenu.
la source
Pour la gestion des dépendances, il existe un nouveau projet (c'est une startup) qui met en œuvre ce type d'outil: https://github.com/biicode (un gestionnaire de dépendances C ++). Vous pouvez ajouter vos dépendances et cela devrait fonctionner.
Actuellement, le nom du projet est conan.io , ils ont été acquis par JFrog .
MISE À JOUR: Le projet est mort ... Malheureusement, il semble que la startup ne puisse pas obtenir suffisamment de clients payants premium, mais le serveur semble fonctionner correctement ...
UPDATE2: Il semble qu'il existe un projet de remplacement: conan.io (merci @mucaho)
la source
Je recommande les systèmes de construction de haut niveau suivants:
la source
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 de même sur la base de ce blog , qui est lié à partir du site Ivy).
Il existe également Byldan , une version .Net de Maven. Je ne sais pas si cela fonctionnera pour vous.
la source
Make et GCC sont un excellent combo 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 source qui dépendent d'un en-tête donné, par exemple.
J'ai quelques règles simples que je coupe-n-coller dans mes makefiles:
Maintenant, si vos fichiers objets sont déclarés dans une liste OBJ_C et OBJ_CPP:
Make peut bien sûr suivre les dépendances avec d'autres projets et autres, par exemple la reconstruction d'une bibliothèque partagée si nécessaire, aussi.
Par exemple, si vos autres équipes mettent toujours leurs dernières DLL dans un dossier partagé:
la source
${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o $@
J'ai eu du mal à analyser tous ces symboles Make, il semble que cela résout quelque chose commeg++ -c main.cc -MD -MF test
si vous voulez l'exécuter de manière autonome en ligne de commande, et il met les résultats dans un fichier nommé «test».Éditer:
Biicode est obsolète
Alternative: Conan.io
la source
Je recommande conan , que j'utilisais ces jours-ci. Il est très puissant de gérer toutes les bibliothèques et binaires dépendants de votre projet.
la source
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 ++
la source
Il existe un certain nombre d'outils au-dessus des SCons, fournissant des fonctionnalités de plus haut niveau 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 - un temps de compilation plus long pour les grands projets.
Je peux recommander d'essayer SNOCS (qui est un SCons inversé) pour ceux d'entre vous qui recherchent une gestion facile des dépendances et qui choisissent les options de compilation dans la commande unique (compilateur, x86 / x64, Debug / Release, bibliothèques statiques / partagées, test / installer des cibles, etc.).
SNOCS essaie également de s'attaquer au problème du temps de compilation long en stockant la sortie de configuration des projets dans des fichiers séparés, ce qui permet aux builds conséquents de sauter complètement la phase de configuration et de passer directement à la phase de construction (la dernière fonctionnalité est en cours de construction maintenant)
La configuration de CMake devient fastidieuse dans une solution plus grande, de sorte que la maintenance du système de construction prend une grande partie du temps du développeur. Heureusement, comme Martijn l'a déjà mentionné, il existe un biicode qui "utilise CMake pour générer votre projet avec ses dépendances".
la source
Essayez SCons
SCons est un outil de construction de logiciels Open Source, c'est-à-dire un outil de construction de nouvelle génération. Considérez SCons comme un substitut multiplateforme amélioré à l'utilitaire Make classique avec des fonctionnalités intégrées similaires à autoconf / automake et aux caches de compilateurs tels que ccache. En bref, SCons est un moyen plus simple, plus fiable et plus rapide de créer des logiciels.
la source
Je recommande d'utiliser la mère de tous les systèmes de dépendance de build: make.
la source
Essayez scons, vous serez accro. La fabrication est obsolète, difficile et coûteuse à entretenir.
la source