2008-10-27 6 views
6

J'ai un très grand projet C avec de nombreux fichiers et en-têtes C séparés et plusieurs dizaines de contributeurs. Beaucoup de contributeurs n'ont pas une forte connaissance des makefiles et des dépendances, ce qui entraîne le problème assez courant où vous devez presque toujours «nettoyer» avant de pouvoir faire confiance à «make» pour avoir produit un résultat correct. Si cela prenait quelques minutes, cela ne poserait pas de problème, mais cela fait maintenant presque 2 heures sur une machine rapide, et les gens commencent à enregistrer le code qui fonctionne quand ils le font, mais ils ne nettoient pas d'abord et leur code casse finalement la construction. Ne demandez pas pourquoi ceux-ci ne sont pas attrapés par le gestionnaire de construction avant qu'une nouvelle base soit coupée ...Vérification des dépendances - comment nettoyer un projet avec des fichiers makefiles défectueux

Oui, nous n'aurions pas dû le laisser aller aussi loin.

Oui, nous éduquons nos développeurs.

Comme d'habitude, nous n'avons pas le temps de tout arrêter et de le réparer à la main.

Je pense qu'il existe des outils dans ce sens:

  • Y at-il des outils automatisés pour aider à construire des informations de dépendance correcte pour un projet existant à partir des fichiers C et H?
  • Existe-t-il des outils automatisés pour décrire les informations de dépendance en fonction des fichiers makefiles?
  • Existe-t-il un Saint-Graal d'un outil pour décrire les différences entre les deux arbres de dépendance ci-dessus?

Mais que peut-on faire d'autre pour résoudre ce problème?

Merci à l'avance ...

-Adam

Répondre

6

Il est peut-être plus facile de passer d'une marque à un outil qui détecte automatiquement les dépendances. Par exemple, SCons ne vous oblige pas à lister les dépendances, mais analyse automatiquement les fichiers en cours de compilation et recherche les inclusions. Vous spécifiez simplement quels fichiers doivent être compilés et quels fichiers vont dans quels exécutables. Changer les systèmes de construction sera plus facile pour le fait que vos développeurs ne sont pas vraiment des experts. Une autre alternative si vous restez avec Make est d'utiliser l'option gcc -M pour détecter automatiquement les dépendances. La réponse à la question Automatically discovering C dependencies a un exemple de comment faire en sorte que vos fichiers makefile détectent automatiquement les dépendances, de sorte que vous n'avez pas besoin de les spécifier à la main.

+0

Ajoutez une règle 'make depend' aux fichiers makefile qui reconstruisent les dépendances, comme dans les questions/réponses SO référencées. –

3

Nous avons le même problème sur mon lieu de travail. Le coffre était toujours cassé après des fusions ou des check-ins.

Nous avons mis en place une machine de compilation continuous integation qui effectue un nettoyage en 45 minutes environ contre environ 2 heures sur une machine de développement. Le serveur d'intégration interroge le référentiel SVN toutes les 2 heures pour les nouveaux enregistrements et lance un nettoyage . De cette façon, nous pouvons surveiller exactement quand la construction a été cassée et la réparer tout de suite. Nous utilisons Hudson comme notre serveur d'intégration continue, sa source libre et open source, c'est une œuvre d'art et très facile à mettre en place. De plus, l'interface utilisateur est très intuitive, tous les autres développeurs l'adorent.

Cheers,

+0

votre lien vers hudson est cassé. – Ilya

+0

Thx, je viens de le corriger –

2

canonique façon de résoudre ce problème consiste à laisser le compilateur générer automatiquement des informations de dépendance pour vous. Quelque chose comme ça (en supposant gcc, vous voulez vérifier votre compilateur pour des options similaires)

SOURCES=foo.c bar.c 

%.d: %.c 
    $(CC) $(CFLAGS) -MM $< >[email protected] 

include $(SOURCES:.c=.d) 

Le manuel GNU Make a un chapitre sur automatically generating prerequisites.

EDIT: Je recommande généralement aux gens de commencer à utiliser CMake lorsqu'ils ont ce genre de problème.

Questions connexes