6
votes

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

Après presque une décennie de codage C # et VC ++, je revenons à un environnement Linux - G ++ - Emacs.

Essayer de rafraîchir ma mémoire sur la rédaction d'un fichier de faire, je n'ai pas eu beaucoup de problèmes, mais je suis tombé dans le numéro suivant que j'avoue que je ne me souviens pas de la façon dont je l'ai résolu dans le passé:

Disons qu'un fichier .CPP particulier a des dépendances à plusieurs autres fichiers d'en-tête (mettre de côté son en-tête correspondant facile à manipuler) ... Quel est le meilleur moyen de détecter que certaines des .h ont changé?

Je n'aime certainement pas l'idée de les placer dans ma cible - dépend de la liste de dépendre, car il s'agit d'un processus manuel et d'erreur!

La réponse facile est bien sûr de construire propre chaque fois qu'il y a un changement .h change mais je ne peux pas vraiment me rappeler quelle était la solution standard ....

en VC ++, je n'avais pas à gérer cela depuis que l'IDE était très bon pour la manipulation des dépendances ...


0 commentaires

3 Réponses :


6
votes

Regardez Dépendances automatisées . GCC avec The -M -MD -MD -MD, etc. Les drapeaux analysent votre fichier et calculeront des dépendances. Passez-les par SED. Il existe de nombreux exemples que Google trouvera.


0 commentaires

1
votes

Comme @Deinst mentionné, GCC a la possibilité de produire tous les fichiers d'en-tête que votre CPP utilise directement et indirectement. Ce dont vous avez besoin est à peu près suivant:

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


0 commentaires

2
votes

DEINST ET IDIMBA Avez-vous sur la bonne voie. Pour lire les pièges potentiels que vous pourriez rencontrer et comment les éviter, jetez un coup d'œil à cet article.

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


0 commentaires