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
的源代码以找出真相。
所以在对源代码进行了一些挖掘之后,它看起来像:
-
Win:
VERSION
用于 Windows 资源(应用程序和库); VER_MAJ
仅用于共享库后缀(例如“mylib1.dll”);如果VER_MAJ
没有设置,那么它从VERSION
初始化; VER_MIN
和 VER_PAT
被忽略。
*nix:VERSION
被忽略,除非VER_MAJ
、VER_MIN
或VER_PAT
中的某些未直接设置,然后它们从VERSION
间接初始化。
因此,对于 Win,应该只使用 VERSION
。对于 *nix,没有真正的区别。
【讨论】:
试试我确实展示了你所说的完全相反:当VERSION
和VER_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