Vérification des dépendances - comment nettoyer un projet avec de mauvais fichiers Makefiles

StackOverflow https://stackoverflow.com/questions/240061

Question

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. De nombreux contributeurs n’ont pas une connaissance approfondie des makefiles et des dépendances, ce qui pose un problème assez courant, qui vous oblige presque toujours à & "Rendre clean &"; avant de pouvoir faire confiance à " make " avoir produit une sortie correcte.

Si make prenait des minutes, ce ne serait pas un problème, mais cela prend presque 2 heures sur une machine rapide, et les gens commencent à enregistrer un code qui fonctionne quand ils le font, mais ils ne nettoient pas en premier et leur Le code casse finalement la construction. Ne demandez pas pourquoi ils ne sont pas détectés par le responsable de la création avant la création d'une nouvelle base de référence ...

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

Oui, nous formons 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:

  • Existe-t-il des outils automatisés permettant de créer les informations de dépendance correctes 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 outil sacré pour décrire les différences entre les deux arbres de dépendance ci-dessus?

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

Merci d'avance ...

-Adam

Était-ce utile?

La solution

Il peut être plus simple de passer de Make à un outil qui détecte automatiquement les dépendances. Par exemple, SCons ne vous oblige pas à répertorier les dépendances, mais analyse automatiquement les fichiers en cours de compilation et recherche les inclus. . Vous spécifiez simplement quels fichiers doivent être compilés et quels fichiers vont dans quels exécutables. Changer de système de construction sera plus facile car vos développeurs ne sont pas vraiment des experts.

Si vous vous en tenez à Make, vous pouvez également utiliser l'option gcc -M pour détecter automatiquement les dépendances. La réponse à la question Détection automatique des dépendances C fournit un exemple de découverte de vos fichiers makefiles. dépendances afin que vous n'ayez pas besoin de les spécifier à la main.

Autres conseils

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

Nous avons mis en place une intégration continue pour une opération de nettoyage en 45 minutes environ. comparé à environ 2 heures sur une machine de développement. Le serveur d'intégration interroge le référentiel SVN toutes les 2 heures à la recherche de 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 serveur d'intégration continue, c'est-à-dire qu'il est gratuit et ouvert, qu'il s'agit d'une œuvre d'art très simple. installer. De plus, l'interface utilisateur est très intuitive, tous les autres développeurs l'adorent.

A bientôt,

La solution à ce problème consiste à laisser le compilateur générer automatiquement les informations de dépendance pour vous. Quelque chose comme ça (en supposant que gcc, vous aurez envie de vérifier votre compilateur pour des options similaires)

SOURCES=foo.c bar.c

%.d: %.c
    $(CC) $(CFLAGS) -MM $< >$@ 

include $(SOURCES:.c=.d)

Le manuel GNU Make contient un chapitre sur générer automatiquement les conditions préalables .

EDIT: Je recommande généralement aux personnes de commencer à utiliser CMake lorsqu'elles rencontrent ce type de problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top