使用Qt的项目中的版本号

ogg*_*ter 9 qt build-process preprocessor version

整个项目都需要版本号; 在安装程序,代码,工具链等.我鄙视重复.我希望我的版本号存储在一个中心权威位置.

我正在使用C/C++并在各种平台上使用Qt.在Qt中,qmake项目指定版本号,如:

VERSION = 1.2.3
Run Code Online (Sandbox Code Playgroud)

在代码中我使用像Version.h这样的标题:

#define VERSION_MAJ 1
#define VERSION_MIN 2
#define VERSION_REV 3
#define VERSION_STRING \"VERSION_MAJ\" "." \"VERSION_MIN\" "." \"VERSION_REV\"
Run Code Online (Sandbox Code Playgroud)

我的安装程序工具链支持C预处理,因此我可以使用Version.h中指定的相同版本.但是,我不知道如何让qmake使用相同的版本号.我以为我可以预处理专业文件,但这不起作用,因为#字符意味着在pro文件中的注释,C预处理器将会失败.

有人知道保持我的版本号集中的好方法吗?

Mic*_*chK 21

我在构建系统中使用这样的东西

#.pro file
#Application version
VERSION_MAJOR = 1
VERSION_MINOR = 0
VERSION_BUILD = 0

DEFINES += "VERSION_MAJOR=$$VERSION_MAJOR"\
       "VERSION_MINOR=$$VERSION_MINOR"\
       "VERSION_BUILD=$$VERSION_BUILD"

#Target version
VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_BUILD}
Run Code Online (Sandbox Code Playgroud)

之后,您可以在应用程序中使用VERSION_MAJOR和其他常规宏.

  • @oggmonster与在应用程序中使用其他宏的方式相同,例如`QString("%1.%2.%3").arg(VERSION_MAJOR).arg(VERSION_MINOR).arg(VERSION_BUILD); (2认同)

sam*_*m-w 2

如果您希望能够将版本号存储在 ac 头文件中,您可以这样做,然后将它们导入到项目文件中的 Qt 项目变量中。像下面这样的东西应该有效:

版本.h:

#define MY_MAJOR_VERSION 3
#define MY_MINOR_VERSION 1
Run Code Online (Sandbox Code Playgroud)

.pro

HEADERS  += Version.h

VERSION_MAJOR = MY_MAJOR_VERSION
VERSION_MINOR = MY_MINOR_VERSION
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,如果您需要从 Qt 之外编译项目的其他部分,您可以使用权威的头文件。