2009-03-02 9 views
7

Comment est-ce que j'imprimerais la date et l'heure pour les buts de la construction. À savoir: Lorsque la console pour mon application démarre je veux faire:Date et heure d'impression Dans la construction Visual Studio C++?

Binary Build date: 03/03/2009 @ 10:00AM 

Je pense que ce serait une fonction super utile pour toutes les applications d'avoir dans les coulisses pour les programmeurs, en particulier dans un environnement d'équipe.

Existe-t-il un moyen simple de faire cela en utilisant Visual Studio 2008 en C++. Merci.

+0

Habituellement, vous incluez un numéro de version avec vos builds. –

Répondre

11

Utilisez les codes __DATE__ et __TIME__ du préprocesseur.

printf("Binary build date: %s @ %s\n", __DATE__, __TIME__); 

Pour faire en sorte que le fichier cpp qui contient ce code est vraiment compilé, j'utiliser tactile utilitaire pour le fichier comme une étape de pré-construction: contact file.cpp

Touch.bat:

@copy nul: /b +%1 tmp.$$$ 
@move tmp.$$$ %1 
+2

Il semble qu'au moins dans VS 2005, les dépendances sont calculées * avant * l'événement de pré-construction, donc j'ai fini par faire 'del $ (OutDir) \ file.obj' dans un événement post-build. –

+0

J'ai essayé un tas d'approches différentes et c'est celle qui a finalement fonctionné pour moi. – morgancodes

+0

J'utilise 'del $ (IntermediateOutputPath) \ $ (TargetName) .obj' - fonctionne comme prévu. – szamil

3

Vous pouvez utiliser les macros __TIME__ et __DATE__. Notez les doubles traits de soulignement. Ceux-ci sont déroulés au moment de la compilation et donc vous obtiendrez la dernière heure de compilation enregistrée dans votre fichier (s). L'une des façons d'utiliser les macros __DATE__ et __TIME__ est de le faire en utilisant les macros

2

. De MSDN (pour VS 2005):

__DATE__: La date de compilation du fichier source de courant. La date est une chaîne littérale de la forme Mmm dd yyyy. Le nom du mois Mmm est le même que pour les dates générées par la fonction de bibliothèque asctime déclarée dans TIME.H.

__TIME__: Dernière heure de compilation du fichier source actuel. L'heure est un littéral de chaîne de la forme hh: mm: ss.

3

Notez que les macros heure et date ne fonctionnent que si le fichier particulier qui les contient est garanti être compilé lors de chaque génération.

+1

Oui, une fonctionnalité n'est pas un bug et nous ne pouvions pas nous attendre à ce qu'elle fonctionne autrement! Sinon, comment le compilateur est-il censé marquer une date si rien n'a été compilé :-) – Mikhail

1

similaires à la réponse de Virne j'ai créé un fichier d'en-tête simple appelé « BuildDate.h » avec le contenu suivant:

#define BUILD_DATE __DATE__ " " __TIME__ 

je touche le fichier en utilisant la commande tactile GnuWin32 dans mon cas de pré-construction:

touch.exe BuildDate.h 

Puis j'inclut le fichier d'en-tête dans n'importe quel code où je veux accéder à la chaîne BUILD_DATE. E.g .:

#include "BuildDate.h" 
... 
logger->Log("Build Date: " BUILD_DATE); 
Questions connexes