我正在尝试将构建日期和时间输入到我的应用程序中,以便可以在“关于”页面中显示。
在我的专业文件中,我有:
DEFINES += "BUILDDATE=$$system(date +'%d-%m-%y %T')"
我已经在系统的终端中尝试过date命令的格式,并且效果很好。
在我的来源中:
QString strBldDate(BUILDDATE);
所有这些构建都没有错误,当我在调试器中签入时,strBldDate为空。
从讨论中得知,我可以使用“ .pro”文件中的message()进行显示,例如:
message($$system(date +"'%d-%m-%y %T'"))
这有效,当我构建时,我得到类似的东西:
Project MESSAGE: 26-06-19 10:34:59
但是我该如何使用它来验证定义的内容?
message(BUILDDATE)
经过我的上述努力,结果如下:
Project MESSAGE: BUILDDATE
答案 0 :(得分:1)
您实际上只能在GCC和MSVC中使用标准的预定义宏。
以下是GCC中的预定义宏列表:3.7.1 Standard Predefined Macros
对于MSVC:Predefined Macros
代码可能看起来像这样:
QString datetime = QStringLiteral(__DATE__) + QStringLiteral(" ") + QStringLiteral(__TIME__);
如果您不能使用预定义的宏,则不要在定义中使用空格,并用反斜杠引号将其包装,如下所示:
DEFINES += BUILDDATE=\\\"$$system( date "+%d.%m.%Y_%H:%M:%S" )\\\"
strBldDate.replace(QChar('_'), QChar(' '));
编辑: 创建 builddatetime.h 文件,并将其包含在需要构建版本的所有位置:
#ifndef BUILDDATETIME_H
#define BUILDDATETIME_H
#include <QString>
const QString BUILDV = QStringLiteral(__DATE__ " " __TIME__);
#endif // BUILDDATETIME_H
在.pro文件中,将 builddatetime.h 添加到标头(HEADERS += builddatetime.h
)中
以及以下几行:
buildtimeTarget.target = builddatetime.h
buildtimeTarget.depends = FORCE
buildtimeTarget.commands = touch $$PWD/builddatetime.h
PRE_TARGETDEPS += builddatetime.h
QMAKE_EXTRA_TARGETS += buildtimeTarget
这将触摸 builddatetime.h ,并且包含此标头的所有cpp文件将在每个构建和运行命令上重新构建。