Dans le cas où un Makefile lui-même est modifié, un pari sûr serait de considérer toutes les cibles périmées.Dépend du fichier make lui-même
Existe-t-il une manière intelligente d'ajouter cette dépendance? Y a-t-il des alternatives?
Dans le cas où un Makefile lui-même est modifié, un pari sûr serait de considérer toutes les cibles périmées.Dépend du fichier make lui-même
Existe-t-il une manière intelligente d'ajouter cette dépendance? Y a-t-il des alternatives?
Un pari sûr, mais une idée terrible. Exemple: vous utilisez automake et mettez à jour Makefile.am
pour ajouter un fichier source unique. La réponse correcte est de compiler uniquement le nouveau fichier et de le relier. Dans votre schéma tout serait reconstruit.
De plus, l'ajout de la dépendance ne va rien faire à moins que vous touchez le fichier, quelque chose comme:
$(SRCS): Makefile
touch [email protected]
Ce sera alors désarçonner les éditeurs qui utilisent le mtime pour détecter une modification concurrente (emacs est un Exemple).
Si vous faites quelque chose de majeur, exécutez simplement make clean all
après avoir effectué la modification.
Je n'ai pas considéré que les sources ne seraient pas mises à jour. Mais que se passe-t-il si tous les _targets_ dépendent du Makefile? +1 pour avoir élevé un bon point. –
@Matt Joiner: Cela fonctionnerait (vous devez également inclure la fermeture transitive de tous les fichiers .mk inclus), mais vous aurez toujours une recompilation redondante, le plus souvent. Mieux vaut ne pas déranger: vous avez alors des builds courts par défaut et la possibilité de faire une build complète si nécessaire. Si vous mettez cela dans, vous n'avez aucun moyen de faire la construction courte si vous n'avez fait qu'un petit réglage mineur. Je sais que vous faites beaucoup de choses en C++. Vous ne pouvez pas sérieusement suggérer que le coût d'une reconstruction complète d'un projet C++ est mineur? –
Pourquoi devriez-vous toucher le Makefile? La règle n'est exécutée que si Makefile est déjà plus récent que les fichiers objet. –
Assurez-vous que les fichiers objets dépendent du makefile:
$(OBJFILES) : Makefile
Où Makefile
est le nom du fichier make.
Je suppose que je dois remplir moi-même SRCFILES? –
Oui. Ma question peut sembler un peu arrogante, mais ce que je voulais dire, c'est quel genre de propriétés vous vouliez d'une solution alternative. Je ne connais pas de moyen de dépendre de "chaque cible". –
J'ai posé la même question il n'y a pas longtemps: http://stackoverflow.com/questions/3871444/making-all-rules-depend-on-the-makefile-itself – reinierpost
Etrange que ça ne soit pas apparu dans un recherche, ce n'est même pas lié. –
Cela pourrait ne pas suffire. Qu'est-ce qui se passe quand les variables changent? (Par exemple, vous devrez peut-être faire un _clean_ entre 'make CDEFS = debug' et' make CDEFS = release'.) – bobbogo