在Visual Studio C++构建中打印日期和时间?

9

我应该如何打印日期和时间以用于构建目的。例如:当我的应用程序控制台启动时,我想要这样做:

Binary Build date: 03/03/2009 @ 10:00AM
我认为这将是所有应用程序在幕后为程序员提供的超级有用的功能,特别是在团队环境中。
是否有一种简单的方法可以使用Visual Studio 2008中的C++实现这个功能?谢谢。

通常情况下,您会在编译时包含版本号。 - Lightness Races in Orbit
5个回答

13

使用预处理器的__DATE____TIME__

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

为确保包含这段代码的cpp文件已编译,我使用touch实用程序作为预构建步骤来触发文件:touch file.cpp

Touch.bat:

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

2
在VS 2005中,似乎依赖项是在预构建事件之前计算的,因此我最终只能在后构建事件中执行del $(OutDir)\file.obj - Joel F
我尝试了许多不同的方法,这是最终适用于我的一个。 - morgancodes
我使用 del $(IntermediateOutputPath)\$(TargetName).obj - 如预期般工作。 - szamil

3
您可以使用宏__TIME____DATE__。请注意双下划线。这些在编译时展开,因此您将得到保存在文件中的最后一次编译时间。

3
请注意,时间和日期宏仅在保证包含它们的特定文件在每次构建期间都被编译时才能按预期工作。

1
是的,这是一个特性而不是一个错误,我们不能期望它以其他方式工作!如果没有编译任何内容,编译器还能如何打上日期戳呢 :-) - Mikhail

2

与Virne的回答类似,我创建了一个名为“BuildDate.h”的简单头文件,其内容如下:

#define BUILD_DATE __DATE__ " " __TIME__

我在预构建事件中使用GnuWin32的touch命令来触摸文件:

touch.exe BuildDate.h

然后我在任何需要访问BUILD_DATE字符串的代码中包含头文件。例如:

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

2

一种方法是使用内置的__DATE____TIME__宏。来自MSDN(适用于VS 2005):

__DATE__: 当前源文件的编译日期。日期是一个字符串字面量,格式为Mmm dd yyyy。月份名称Mmm与在TIME.H中声明的asctime库函数生成的日期相同。

__TIME__: 当前源文件的最近编译时间。时间是一个字符串字面量,格式为hh:mm:ss。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接