Besoin d'une règle de dépendance de makefile capable de gérer les fichiers manquants

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

  •  04-07-2019
  •  | 
  •  

Question

Nous utilisons GNU Make pour notre système. À la fin de nos fichiers makefiles, nous avons une inclusion appelée Makedepends qui génère un tas de fichiers .d en utilisant -MM switch sur gcc. Nous incluons ensuite le fichier .d pour chaque fichier .cc à l'aide d'une ligne include $ (CXXFILES: .cc = .d). Mais lorsque nous supprimons ou déplaçons des fichiers, l’étape des dépendances se rompt et nous devons supprimer manuellement les fichiers .d (même un make clean ne fonctionne pas car les dépendances échouent)

Existe-t-il un moyen de générer ces fichiers .d de dépendance ou d’inclure ces fichiers .d de dépendance qui gèrent gracieusement une suppression ou un déplacement de fichier?

EDIT: Par exemple: j'ai serial.cc et les makefiles génèrent un fichier serial.d qui a une dépendance sur buffer.h mais je le modifie alors je n'ai plus besoin de buffer.h et je supprime le tampon .h. La prochaine fois que j'exécute make, il va s'étouffer car il inclut le fichier .d qui fait que serial.o dépend toujours de buffer.h.

Était-ce utile?

La solution

http://make.mad-scientist.net/papers / advanced-auto-dependency-generation décrit ce problème avec précision et l’a décrit de plusieurs manières. Le premier est un peu erroné, mais le "avancé" est essentiellement sur place.

Autres conseils

Deux possibilités:

D'abord, pouvez-vous ajouter une règle à votre Makefile pour exécuter l'étape de dépendance:

.SUFFIXES: .d

%.d::
   makedepend_command_here

Sinon, dans la section Dernier recours de la page info pour GNU Make:

  

Par exemple, lors du test d'un   makefile, vous pourriez ne pas vous soucier de la   les fichiers source contiennent des données réelles, uniquement   qu'ils existent. Alors vous pourriez faire   ceci:

 %::
         touch $@
     

pour provoquer tous les fichiers source nécessaires   (comme prérequis) à créer   automatiquement.

Est-ce que cela fonctionnera pour créer des fichiers .d vides pour vous?

Si vous utilisez makepp avec l'option - rm-stale , il remarquera les fichiers qui ne sont plus compilables et les supprimera. S'il s'agit d'un cas d'utilisation normal pour vous, vous pouvez placer cette option dans .makepprc à la racine de votre arborescence de génération, qui sera toujours utilisée.

Mais bien entendu, makepp gère lui-même toute cette détection de dépendance. Vous n'avez donc pas besoin d'encombrer votre fichier makefile. C'est encore mieux que votre approche, car elle peut générer les en-têtes nécessaires à temps pour le compilateur, où gcc -MM échouerait.

Il y a beaucoup plus de choses à faire. En plus de faire presque tout ce que GNU peut faire, il y a beaucoup plus de choses utiles, et vous pouvez même étendre vos makefiles avec une programmation Perl.

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