Embed timestamp in object code at compile time with C++
Solution 1
You could use __DATE__
and __TIME__
.
Solution 2
16.8 Predefined macro names [cpp.predefined]
1 The following macro names shall be defined by the implementation:
__LINE__
The line number of the current source line (a decimal constant).
__FILE__
The presumed name of the source file (a character string literal).
__DATE__
The date of translation of the source file (a character string literal of the form "Mmm dd yyyy", where the names of the months are the same as those generated by the asctime function, and the first character of dd is a space character if the value is less than 10). If the date of translation is not available, an implementation-defined valid date is supplied.
__TIME__
The time of translation of the source file (a character string literal of the form "hh:mm:ss" as in the time generated by the asctime function). If the time of translation is not available, an implementation-defined valid time is supplied.
__STDC__
Whether__STDC__
is predefined and if so, what its value is, are implementation-defined.
__cplusplus
The name__cplusplus
is defined to the value 199711L when compiling a C++ translation unit.
You want __TIME__
and possibly __DATE__
.
Solution 3
Use the macros __DATE__
and __TIME__
Solution 4
If you are using gcc preprocessor then you will find what you are looking for in the __TIME__
and __DATE__
macros
Quotes from GNU C pre-processor documentation:
__DATE__
This macro expands to a string constant that describes the date on which the preprocessor is being run. The string constant contains eleven characters and looks like "Feb 12 1996". If the day of the month is less than 10, it is padded with a space on the left.
...
__TIME__
This macro expands to a string constant that describes the time at which the preprocessor is being run. The string constant contains eight characters and looks like "23:59:01".
Solution 5
Use a script, or create an application, to generate a C++ source file containing the build date and time. Add this file to the build setup. The other parts of the program can reference the data in this file.
This technique is also useful for embedding a version number into the program. The build process can control the version number.
theactiveactor
Updated on July 09, 2022Comments
-
theactiveactor almost 2 years
I want to perform a
printf()
to display when the currently executing code was last compiled. Does C/C++ provide a macro that gives you that resolves to a timestamp during compilation? -
jschmier about 14 years@Inverse - You might modify your build process to recreate a file containing the
__DATE__
and__TIME__
macros on every compilation. -
sthlm58 over 10 yearsFrom MSDN:
__TIMESTAMP__
gives you the date and time of last edit (!) made to file (not the compilation time). -
Renan Gemignani over 10 yearsWhat I do is program the makefile to
touch
the file containing the macro before compilation in order to force its rebuild (ideally, the file containing the macros should be such that few, if any other files depend on it. -
GManNickG over 7 years@einpoklum: C has the same list of macros, and more, with some slight differences. For example,
__STDC__
is "The integer constant 1, intended to indicate a conforming implementation.", and__cplusplus
is never defined. The full list in C11 is at §6.10.8.1. -
Alexander about 7 yearsJust a hint for better Performance:"ATTACHED VERSION: "
__DATE__
" "__TIME__
. works too. -
Pryftan about 4 yearsJust to point out: this has nothing to do with GCC. This is a standard thing. So you're right that the macros are as you say but it's not just for GCC.