2008-11-26 6 views
3

J'ai une bibliothèque composée d'environ 100 fichiers source. Je veux que l'une des sources soit toujours reconstruite si l'un des autres fichiers a été compilé mais je ne veux pas qu'elle soit compilée chaque fois que je lance make/build.Comment créer automatiquement un fichier avec la dernière heure de compilation et l'inclure dans une bibliothèque?

Fondamentalement, je veux que ce fichier ait la dernière date/heure de construction intégrée afin que toute application liant à la bibliothèque puisse vérifier la dernière date/heure de compilation. Y a-t-un autre moyen de faire ça?

+0

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éé. –

+0

pouvez-vous s'il vous plaît changer le titre de la question pour refléter le contenu de la question? –

+0

Salut Nathan, je ne sais pas quel titre je mettrais dessus, des suggestions? –

Répondre

4

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à.

+0

C'est bon, compile à tout moment un lien est nécessaire .... –

+0

Cela semble faux. C'est 'version.c' qui devrait dépendre de' $ (OBJFILES) '. – reinierpost

8

Que le fichier objet contenant l'horodatage de construction dépendent de tous les autres fichiers d'objet:

version.o: $(OBJECTS) 
+0

C'est fondamentalement ce que je veux.Maintenant tout ce que j'ai à faire est de comprendre comment obtenir cette configuration de dépendance dans le projet Visual Studio 2005. –

+0

Cela peut s'avérer être un peu plus difficile ... – JesperE

Questions connexes