Qt:qmake中VERSION和VER_MAJ、VER_MIN、VER_PAT的区别

Posted

技术标签:

【中文标题】Qt:qmake中VERSION和VER_MAJ、VER_MIN、VER_PAT的区别【英文标题】:Qt: difference between VERSION and VER_MAJ, VER_MIN, VER_PAT in qmake 【发布时间】:2019-06-11 18:32:23 【问题描述】:

我在 Qt5 中使用 linux 作为共享库。

因为在.pro 中使用过:

VERSION = 1.2.3

VER_MAJ = 1
VER_MIN = 2
VER_PAT = 3

为库生成相同的输出名称(lib.so、lib.so.1、lib.so.1.2、lib.so.1.2.3),实际区别是什么?

Qt 文档说明:

VERSION 指定应用程序的版本号,如果应用程序 指定模板或库的版本号(如果库) 模板已指定。

VER_MAJ 指定库的主版本号,如果 lib 模板已指定。

VER_MIN 指定库的次要版本号,如果 lib 模板已指定。

VER_PAT 指定库的补丁版本号 模板已指定。

由于我没有使用app 模板,两者是否相同?我有理由选择其中之一吗?

编辑:无论定义顺序如何,似乎VER_MAJ, VER_MIN, VER_PAT 在 che 库版本输出的定义中总是优先于 VERSION

【问题讨论】:

【参考方案1】:

Qt 文档状态

关于qmake,至少可以说,Qt 文档并不准确。应该经常查阅qmake 的源代码以找出真相。

所以在对源代码进行了一些挖掘之后,它看起来像:

    WinVERSION 用于 Windows 资源(应用程序和库); VER_MAJ 仅用于共享库后缀(例如“mylib1.dll”);如果VER_MAJ没有设置,那么它从VERSION初始化; VER_MINVER_PAT 被忽略。 *nixVERSION 被忽略,除非VER_MAJVER_MINVER_PAT 中的某些未直接设置,然后它们从VERSION 间接初始化。

因此,对于 Win,应该只使用 VERSION。对于 *nix,没有真正的区别。

【讨论】:

试试我确实展示了你所说的完全相反:当VERSIONVER_MAJ, VER_MIN, VER_PAT都被定义时,后者在生成.so版本号时优先于VERSION。申报顺序不计算在内。至少我的 Linux 发行版会发生这种情况。

以上是关于Qt:qmake中VERSION和VER_MAJ、VER_MIN、VER_PAT的区别的主要内容,如果未能解决你的问题,请参考以下文章

Qt之msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set

How to change default used version of Qt/qmake?

Qt5Error:msvc-version.conf loaded but QMAKE_MSC_VER ins‘t set

如何找到 Qt 的版本?

Qt QMAKE_MSC_VER

Qt高级——QMake快速入门