6 votes

Comment détecter les changements d'en-tête dans la liste des dépendances de make ?

Après presque une décennie de codage en C# et VC++, je reviens à un environnement linux - g++ - make - emacs.

En essayant de me rafraîchir la mémoire sur l'écriture d'un fichier make, je n'ai pas eu beaucoup de problèmes, mais je suis tombé sur le problème suivant, et j'avoue ne pas me souvenir de la façon dont je l'ai résolu dans le passé :

Disons qu'un fichier .cpp particulier a des dépendances avec plusieurs autres fichiers d'en-tête (en mettant de côté son en-tête correspondant qui est facile à gérer) Quelle est la meilleure façon de détecter que certains des .h ont été modifiés ?

Je n'aime certainement pas l'idée de les placer dans ma liste de cibles - dépendantes, car il s'agit d'un processus manuel et sujet aux erreurs !

La solution la plus simple est bien sûr de reconstruire proprement chaque fois qu'il y a un changement de .h, mais je ne me souviens pas vraiment de la façon dont on procédait habituellement .

Dans VC++, je n'ai pas eu à m'en préoccuper car l'IDE gérait très bien les dépendances

7voto

deinst Points 8706

Regarder dépendances automatisées . gcc avec les options -M -MD -MT etc. analysera votre fichier et calculera les dépendances. Passez-les par sed. Il existe de nombreux exemples que Google trouvera.

2voto

Ken Smith Points 192

Deinst et idimba vous mettent sur la bonne voie. Pour en savoir plus sur les pièges potentiels que vous pourriez rencontrer et sur la manière de les éviter, consultez cet article.

http://mad-scientist.net/make/autodep.html

1voto

dimba Points 5389

Comme @deinst l'a mentionné, gcc a la capacité de sortir tous les fichiers d'en-tête que votre cpp utilise directement et indirectement. Ce dont vous avez besoin est à peu près ce qui suit :

obj-file: src-file

# dep file should be recreated each time header file or header file it depends on is changed
dep-file: src-file 
    gcc -M ...... > dep-file
    modify dep-file to make dep-file depend and all header files too

include dep-file

Cette idée a été mise en œuvre une fois dans le cadre d'un projet auquel j'ai participé, mais sa mise en œuvre complète a été longue et délicate.

Si vous en avez la possibilité, envisagez d'utiliser des outils plus performants qui prennent en charge l'autodépendance, tels que cmake o scons . J'ai personnellement travaillé avec cmake - chaque programmeur peut écrire un fichier cmake et l'autodépendance est gratuite.

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