2009-03-02 9 views
7

Come stampare la data e l'ora per gli scopi della compilazione. Vale a dire: Quando la console per la mia applicazione si avvia voglio fare questo:Stampa data e ora In Visual Studio C++ build?

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

Penso che questa sarebbe una funzione super utile per tutte le applicazioni di avere dietro le quinte per i programmatori, soprattutto in un ambiente di squadra.

C'è un modo semplice per farlo utilizzando Visual Studio 2008 in C++. Grazie.

+0

Di solito dovresti includere un numero di versione con le tue build. –

risposta

11

Utilizzare il preprocessore __DATE__ e __TIME__.

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

Per fare in modo che il file cpp che contiene questo codice è davvero compilato, io uso touch-programma di utilità per file come un pre-compilazione passo: tocco file.cpp

Touch.bat:

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

Sembra che almeno in VS 2005, le dipendenze siano calcolate * prima * dell'evento pre-build, quindi ho finito per fare solo 'del $ (OutDir) \ file.obj' in un evento post-build. –

+0

Ho provato un sacco di approcci diversi e questo è quello che finalmente ha funzionato per me. – morgancodes

+0

Uso 'del $ (IntermediateOutputPath) \ $ (TargetName) .obj' - funziona come previsto. – szamil

3

È possibile utilizzare i macro __TIME__ e __DATE__. Notare i doppi underscore. Questi sono srotolati in fase di compilazione e quindi otterrete l'ultima volta in fase di compilazione salvata nei vostri file.

2

Un modo per farlo sarebbe utilizzare i macro integrati __DATE__ e . Da MSDN (per VS 2005):

__DATE__: La data di compilazione del file sorgente corrente. La data è una stringa letterale della forma Mmm gg aaaa. Il nome del mese Mmm è lo stesso delle date generate dalla funzione ASCtime della libreria dichiarata in TIME.H.

__TIME__: Il tempo di compilazione più recente del file sorgente corrente. Il tempo è una stringa letterale della forma hh: mm: ss.

3

Si noti che le macro di data e ora funzionano come desiderato se è garantito che il particolare file che le contiene sia compilato durante ogni generazione.

+1

Sì, è una funzionalità non un bug e non potremmo aspettarci che funzioni in altro modo! In quale altro modo il compilatore dovrebbe stampare una data se non è stata compilata :-) – Mikhail

1

Simile alla risposta di Virne ho creato un semplice file di intestazione chiamato "BuildDate.h" con il seguente contenuto:

#define BUILD_DATE __DATE__ " " __TIME__ 

mi tocco il file utilizzando il comando GnuWin32 tocco nel mio caso in pre-compilazione:

touch.exe BuildDate.h 

Quindi includo il file di intestazione in qualsiasi codice in cui desidero accedere alla stringa BUILD_DATE. Es .:

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