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

SPl*_*ten 5 c++ qt

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

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

    DEFINES += "BUILDDATE=$$system(date +'%d-%m-%y %T')"
Run Code Online (Sandbox Code Playgroud)

我已经在系统上的终端中尝试了带有格式的日期命令,它工作正常。

在我的来源中:

    QString strBldDate(BUILDDATE);
Run Code Online (Sandbox Code Playgroud)

这一切都构建没有错误,当我检查调试器时,strBldDate 为空。

从讨论中我得知我可以在“.pro”文件中使用 message() 来显示例如:

    message($$system(date +"'%d-%m-%y %T'"))
Run Code Online (Sandbox Code Playgroud)

这是有效的,当我构建时我得到类似的东西:

    Project MESSAGE: 26-06-19 10:34:59
Run Code Online (Sandbox Code Playgroud)

但是我如何使用它来验证定义的内容呢?

    message(BUILDDATE)
Run Code Online (Sandbox Code Playgroud)

经过我的上述努力,结果是:

    Project MESSAGE: BUILDDATE
Run Code Online (Sandbox Code Playgroud)

Xpl*_*rms 8

实际上,您可以在 GCC 和 MSVC 中使用标准预定义宏来实现此目的。

以下是 GCC 中预定义宏的列表:3.7.1 标准预定义宏

对于 MSVC:预定义宏

代码可能如下所示:

QString datetime = QStringLiteral(__DATE__) + QStringLiteral(" ") + QStringLiteral(__TIME__);
Run Code Online (Sandbox Code Playgroud)

如果您无法使用预定义的宏,请不要在定义中使用空格并用反斜杠引号将其打包,如下所示:

DEFINES += BUILDDATE=\\\"$$system( date "+%d.%m.%Y_%H:%M:%S" )\\\"

strBldDate.replace(QChar('_'), QChar(' '));
Run Code Online (Sandbox Code Playgroud)

编辑: 创建builddatetime.h文件并将其包含在您需要构建版本的任何地方:

#ifndef BUILDDATETIME_H
#define BUILDDATETIME_H

#include <QString>
const QString BUILDV =  QStringLiteral(__DATE__ " " __TIME__);

#endif // BUILDDATETIME_H
Run Code Online (Sandbox Code Playgroud)

在您的 .pro 文件中,将builddatetime.h添加到 headers ( HEADERS += builddatetime.h) 以及以下行:

buildtimeTarget.target = builddatetime.h
buildtimeTarget.depends = FORCE
buildtimeTarget.commands = touch $$PWD/builddatetime.h
PRE_TARGETDEPS += builddatetime.h
QMAKE_EXTRA_TARGETS += buildtimeTarget
Run Code Online (Sandbox Code Playgroud)

这将触及builddatetime.h,并且包含此标头的所有 cpp 文件将在每个构建和运行命令上重建。