是否有可能在编译时间(当天)和date?

编译时可以知道时间和date(BUILDTIME),以便以便携的方式在二进制文件(可执行文件/库)中包含它们创build时刻的信息?

我们目前有一个解决scheme,使用sh.exe,并要求在Windows下安装msys,但我想知道如果没有它可能做。

search诸如“编译时间/date”,“编译时间/date”等事情并没有导致任何相关的结果。

编辑:

当我了解了__TIME__ ,就可以发现这个问题曾经被问过: logging你编译一个源代码的时间

标准的宏__DATE____TIME__宏可以完成这个工作。

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

C99标准说 :

6.10.8预定义的宏名称

下面的宏名称应由实现来定义:

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

我在这里复制了C99文本,但是这些宏比C99年代久远…我没有设法找到旧C的标准文本…

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

你总是可以写一个5行的程序,调用timestrftime并把它输出到一个文件,而不是使用sh 。 [我曾用这种方法更新过去的“内部版本号”和/或“版本号”]。

除了__DATE____TIME__宏之外,您可以使用宏在生成时将值传递给您的程序。

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

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

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

然后在你的代码中进行串联:

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