问题的提出
在发布 Qt 程序时,在版本号中,可能想要附上发布日期,这时,可以用 C++ 中的预定义宏 “__TIME__”,但是,存在一个问题,如果包含 “__TIME__” 的源文件没有修改过,编译时,编译工具并不会再次编译这个源文件,从而导致发布日期不会自动更新。
解决方法
下面的方法在 Qt 5.12.12 win10 中试验通过。
假设,源文件 Version.cpp 中,有一个函数返回当前软件的版本号,如下所示,“__TIME__” 用于在版本号后面附上发布日期:
std::string getVersion()
{
return std::string("V1.0.0") + "_" + __TIME__;
}
在 Qt 工程中的 “.pro” 文件中,加入如下代码:
CONFIG(debug, debug|release) {
MYCONFIG = debug
} else {
MYCONFIG = release
}
myTarget.target = $$PWD/Version.cpp
myTarget.commands = $(CXX) $(CXXFLAGS) -c $$PWD/Version.cpp -o $$OUT_PWD/$$MYCONFIG/Version.o
myTarget.depends = FORCE
QMAKE_EXTRA_TARGETS += myTarget
PRE_TARGETDEPS += $$PWD/Version.cpp
这样,在每次编译时,无论 Version.cpp 是否经过修改,都会无条件编译 Version.cpp 源文件,从而实现自动更新编译日期