Sortie de la compilation de timbre dans Visual C++ de l'exécutable?
Comment puis-je insérer la compilation des informations d'horodatage dans un fichier exécutable-je construire avec Visual C++ 2005? Je veux être en mesure de produire quelque chose de ce genre quand j'execute le programme:
Cette version XXXX a été compilé à jj-mm-aa hh:mm.
où la date et le temps de réfléchir au moment où le projet a été construit. Ils ne devraient pas changer à chaque appel successif du programme, sauf si c'est recompilé.
- Voir la réponse à cette question: Impression de la Date et de l'Heure Dans Visual Studio C++ build
Vous devez vous connecter pour publier un commentaire.
Mais pas votre format exact, DATE sera au format Mmm jj aaaa, tandis que TEMPS sera de la forme hh:mm:ss. Vous pouvez créer une chaîne comme celle-ci et l'utiliser dans n'importe quelle routine d'impression a un sens pour vous:
(Note sur une autre réponse: TIMESTAMP crache uniquement sur la modification de la date/heure du fichier source, et non pas l'accumulation de date/heure.)
sont prédéfinis dans le cadre des normes de C99 devrait donc être disponible pour vous. Ils courent une fois avec le préprocesseur.
Bien... pour Visual C++, il y a un construit en symbole appelé
__ImageBase
. Plus précisément:EXTERN_C IMAGE_DOS_HEADER __ImageBase;
Vous pouvez contrôler que lors de l'exécution pour déterminer le timestamp dans l'en-tête PE:
const IMAGE_NT_HEADERS *nt_header= (const IMAGE_NT_HEADERS *)((char *)&__ImageBase + __ImageBase.e_lfanew);
Et l'utilisation
nt_header->FileHeader.TimeDateStamp
pour obtenir le timestamp, qui est secondes de 1/1/1970.__TIME__
et__DATE__
peut fonctionner, cependant, il ya certaines complications.Si vous mettez ces définitions dans un .h fichier, et inclure les définitions de plusieurs .c/.cpp fichiers, chaque fichier aura une version différente de la date/de l'heure basée sur le moment où il sera compilé. Donc, si vous êtes à la recherche pour l'utilisation de la date/de l'heure dans deux endroits différents et ils doivent toujours correspondre, vous êtes en difficulté. Si vous êtes en train de faire un différentiel de construire, l'un des fichiers peuvent être reconstruits, tandis que l'autre ne l'est pas, ce qui à nouveau les résultats dans des positions qui pourraient être très différentes.
Légèrement meilleure approche est de faire GetBuildTimeStamp() de prototypes dans un .h de fichier, et de mettre le
__TIME__
et__DATE__
macros dans la mise en œuvre(.c/.cpp fichier. De cette façon, vous pouvez utiliser l'horodatage dans plusieurs endroits dans le code, et ils seront toujours à la hauteur. Cependant, vous devez vous assurer que l' .c/.cpp le fichier est recréé à chaque fois qu'une construction est réalisée. Si vous êtes en train de faire nettoyer s'appuie ensuite cette solution peut fonctionner pour vous.Si vous êtes en train de faire des versions, alors vous avez besoin de mettre de timbre est mis à jour à chaque génération. Dans Visual C++, vous pouvez le faire avec Paquetage étapes - mais dans ce cas, je vous recommande plutôt d'utiliser
__DATE__
et__TIME__
en mode compilé .c/.cpp fichier, vous utilisez un fichier texte qui est lu au moment de l'exécution au cours de votre programme à l'exécution. Cela rend plus rapide pour construire votre script pour mettre à jour le timestamp (pas de compilation ou de lien nécessaire) et ne nécessite pas votre Paquetage étape pour comprendre vos options de compilation ou d'options.Je pense, les solutions suggérées pour l'utilisation DATE, TEMPS ou TIMESTAMP serait assez bon. Je recommande d'obtenir une prise d'un contact de programme à inclure dans une pré-étape de génération afin de toucher le fichier qui contient l'utilisation de la variable de préprocesseur. Toucher à un fichier permet de s'assurer que son timestamp est plus récente que au moment de la dernière compilation. De cette façon, la date et l'heure dans le fichier compilé est changé à chaque reconstruction.
Visual C++ prend également en charge
__TIMESTAMP__
qui est presque exactement ce dont vous avez besoin. Cela étant dit, la partie la plus difficile au sujet de construire des horodateurs est de les maintenir à jour, cela signifie que la compilation du fichier dans lequel__TIMESTAMP__
est utilisé sur tous les reconstruire. Vous ne savez pas si il existe un moyen de le configurer dans Visual C++ si.