Pour développer un peu sur la solution de JesperE.
Laisser le fichier objet dépendre de toutes les cibles dont dépend l'exécutable (excluant lui-même).
Donc si tout l'exécutable dépend des objets, alors JesperE est complètement correct.
Sinon, vous pouvez reconstruire l'exécutable sans mettre à jour l'horodatage, dans le cas où l'une des autres dépendances change mais aucun de vos fichiers objets. Donc, les deux choses mentionnées dans la question, "a la dernière heure de construction/date" et "reconstruit si l'une des sources a été compilée", ne sont pas réellement la même chose, donc cela dépend de ce que vous voulez.
Les exemples peuvent inclure une bibliothèque avec laquelle vous liez statiquement, ou un script qui est utilisé pour faire la liaison et qui change beaucoup de sorte qu'il a été rendu une dépendance pour la commodité des développeurs. Cela ne mettra toujours pas à jour l'horodatage si vous supprimez simplement l'exécutable et le reconstruisez (peut-être parce que quelque chose a changé, mais pas une dépendance, par exemple parce que vous avez récupéré la dernière version de l'éditeur de liens ou vous avez changé quelque chose dans l'environnement qui affecte l'éditeur de liens et/ou le fichier makefile). Donc, la meilleure chose à faire pourrait être de compiler l'objet dans le cadre de la règle pour la construction de l'exécutable, comme ceci:
blah.exe : whatever
rm -f version.o
$(CC) $(CFLAGS) -c version.c
$(CC) $(CFLAGS) $(OBJFILES) version.o -o blah.exe
ou tout autre (probablement pas .exe si vous utilisez faire, mais vous ne savez jamais). En fait, la gestion des erreurs est un peu douteuse, puisque version.o ne sera pas supprimée si la dernière ligne échoue. J'ajouterais aussi que si vous voulez publier quelque chose pour les utilisateurs (je veux dire, en gros, quelqu'un à plus de 10 pieds de votre bureau), ça pourrait être une bonne idée de construire à partir de zéro plutôt que de courir faire pour mettre à jour, et l'expédier. Il est plutôt facile de bousiller le fichier makefile afin de ne pas avoir de dépendance, de créer accidentellement une "version mixte" et de ne pas pouvoir reproduire ce que vous avez envoyé. J'ai déjà créé des makefiles pour que le numéro de version soit délibérément saboté (défini sur "0.0 private build") s'il a été construit par un développeur - seul le serveur de build définit l'option utilisée pour activer le bon numéro de version. Pour ce projet, il n'était pas utile de mettre un nombre sur quelque chose qui n'a pas été retiré du contrôle de la source par des balises, et construit à partir de là.
Je pense que vous faites dépendre la règle de ce fichier de tous les autres fichiers objets. Si un autre fichier objet est plus récent, alors votre fichier objet sera refait, de sorte qu'il sera toujours le dernier créé. –
pouvez-vous s'il vous plaît changer le titre de la question pour refléter le contenu de la question? –
Salut Nathan, je ne sais pas quel titre je mettrais dessus, des suggestions? –