Qt,Linux,添加构建日期和时间定义

时间:2019-06-26 08:29:04

标签: c++ qt

我正在尝试将构建日期和时间输入到我的应用程序中,以便可以在“关于”页面中显示。

在我的专业文件中,我有:

    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

1 个答案:

答案 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文件将在每个构建和运行命令上重新构建。