方法一 (最佳实例★★★)
编译器 Qt Creator / visual studio Community 2014
希望使用 __DATE__ 与 __TIME__ 中的日期与时间
在版本号信息加上编译日期、编译时间添加到程序对应界面上
static const QDateTime datetime buildDateTime()
{
const QString datetime = QStringLiteral("%1 %2").arg( __DATE__ ).arg( __TIME__ ) ;
return QLocale(QLocale::English).toDateTime( datetime.simplified() , "MMM d yyyy hh:mm:ss " );
}
注意 :QStringLiteral 在编译时创建,QString 是动态创建的
本文章支持 日 为单个数字情形,即:Nov 1 可能在其他人博客文章中的例子无法正确解析。
问题的提出
在发布 Qt 程序时,存在一个问题,如果包含 “__TIME__” 的源文件没有修改过,编译时,编译工具并不会再次编译这个源文件,从而导致发布日期不会自动更新。
解决方法
需要每一次都重新编译,编译时间才能更新。
所以,在上面的代码在文件编译成功后就不会再变化了,这样的编译时间和exe的时间是有可能相差很大的。
通过在pro文件中,每次编译成功后,将对应的 .o文件给删除,这样下一次编译都是重新编译。
.o 文件 就是放上面代码的文件的名称。例如我的文件是versioninfo.cpp中,我每次都删除 versioninfo.o* 文件(注意 windows 后缀有obj)
具体pro 中添加如下:
#删除文件
defineTest(delFile) {
file = $$1
# 替换Windows源路径中的斜杠
win32:file ~= s,/,\\,g
# 删除命令
QMAKE_POST_LINK += $$QMAKE_DEL_FILE $$shell_quote($$file) $$escape_expand(\\n\\t)
export(QMAKE_POST_LINK)
}
#删除文件,实现每次编译都会更新编译时间
delFile($$OUT_PWD/debug/versioninfo.o*)
以上名称中,不要随便修改defineTest 中的Test. 相关逻辑已经经过测试ok
原理
编译时候生成exe需要所有的obj文件,如没有,将导致重新编译对应的cpp文件
1856

被折叠的 条评论
为什么被折叠?



