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

42fyovps  于 2023-01-22  发布在  Linux
关注(0)|答案(2)|浏览(150)

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

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
c2e8gylq

c2e8gylq1#

实际上,您可以在GCC和MSVC中使用标准的预定义宏。
以下是GCC中的predef宏列表: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文件将在每个构建和运行命令时重新构建。

cgh8pdjw

cgh8pdjw2#

对于每个想要相同但在windows上的人。使用@Xplatforms解决方案与builddatetime.h文件,但使用不同的命令:

WIN_PWD=$$replace(PWD, /, \\)

buildtimeTarget.target = builddatetime.h
buildtimeTarget.depends = FORCE
buildtimeTarget.commands = copy /b $$WIN_PWD\builddatetime.h+,,$$WIN_PWD\builddatetime.h
PRE_TARGETDEPS += builddatetime.h
QMAKE_EXTRA_TARGETS += buildtimeTarget

相关问题