在编译时可以知道时间和date(BUILDTIME),以便以便携的方式在二进制文件(可执行文件/库)中包含它们创build时刻的信息?
我们目前有一个解决scheme,使用sh.exe,并要求在Windows下安装msys,但我想知道如果没有它可能做。
search诸如“编译时间/date”,“编译时间/date”等事情并没有导致任何相关的结果。
编辑:
如何编译包含多个源文件的项目?
cifs挂载导致进程进入不间断的睡眠
如何禁用由Matlab编译器生成的exe的高DPI设置的显示缩放比例
编译一个有限的库访问的程序
当我了解了__TIME__ ,就可以发现这个问题曾经被问过: logging你编译一个源代码的时间
不能在Linux上编译C ++代码,但可以在Mac OS上编译
使用静态Swift核心库编译Swift脚本
如何解决“configure.ac:不使用Gettext … Libtool Automake”? GNU / Linux中的Autoconf错误?
使用dynamicssl,ssh2和dynamiczlib,通过发布dynamic库在vc9 / vc11上构buildcurl
修改编译的可执行内存分配
标准的宏__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行的程序,调用time和strftime并把它输出到一个文件,而不是使用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("%sn",STR(BUILD_TIME)); // display build time
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。