繁体   English   中英

是否有可能在编译时得到时间(当天)和日期?

[英]Is it possible to get the time (of the day) and date at time of compilation?

有什么可能在编译时知道时间和日期(BUILDTIME),以便以可移植的方式在二进制文件(可执行文件/库)中包含有关它们创建时刻的信息?

我们目前有一个使用sh.exe的解决方案,并且需要在Windows下安装msys,但我想知道是否可以不使用它。

搜索“构建时间/日期”,“编译时间/日期”等内容并未导致任何相关结果。

编辑:

当我开始了解__TIME__ ,之后可能会发现这个问题: 记录编译源的时间

标准宏__DATE____TIME__完成工作。

请注意,这将为您提供使用它们的文件的编译日期 不是链接日期。 因此,您必须在每次构建时touch该文件,或者在MSVC中执行预构建步骤。

C99标准说

6.10.8预定义的宏名称

以下宏名称应由实现定义:

  • __DATE__ :预处理翻译单元的翻译日期:“Mmm dd yyyy”形式的字符串文字,其中月份的名称与asctime函数生成的相同,dd的第一个字符是a如果值小于10,则为空格字符。如果转换日期不可用,则应提供实现定义的有效日期。
  • __TIME__ :预处理翻译单元的翻译时间:形式为“hh:mm:ss”的字符串文字,与asctime函数生成的时间相同。 如果没有翻译时间,则应提供实施定义的有效时间。

我在这里复制了C99文本,但是这些宏比C99还要老......我没有找到旧版C的标准文本...

你可以使用像__DATE____TIME__这样的宏。 这对于Visual Studio也是可移植的(参见http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.80).aspx

您总是可以编写一个调用timestrftime的5行程序并将其输出到文件,而不是使用sh [我已经使用这种方法来更新过去的“版本号”和/或“版本号”]。

除了__DATE____TIME__宏之外,您还可以在构建时使用宏将值传递给程序。

在Makefile中,您可以在构建时传递宏中的日期:

gcc -Wall -DBUILD_TIME=`date +%d%m%y_%T` tst.c -o tst

(或使用任何其他date格式)

然后在你的代码中stringify:

#define STR(x) STR1(x)
#define STR1(x) #x

printf("%s\n", STR(BUILD_TIME));  // display build time

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM