Qt的安装包可以随意移动

本文翻译自:Qt is relocatable
原文作者:Jörg Bornemann
校审:Richard Lin

从5.14.0版开始,Qt安装文件可以随意移动,也就是说,可以将Qt安装文件移动到其他目录下,而不会破坏已有的功能或加载的插件。

那么对您来说有什么好处呢?

假如您负责一个Windows项目Qt库的构建。您精通所有的配置参数。您很清楚要打开哪个优化选项、关闭哪些不需要的功能。您的Qt构建是根据项目量身定制的,最后你提供了Qt安装包的zip文件。

您运行了

configure -prefix C:/Qt/5.12.6 ...more options...
jom
jom install
zip -r X:\shared_stuff\qt-5.12.6.zip C:\Qt\5.12.6

然后,您的同事将存档文件解压缩到完全相同的位置,一切都正常工作。

现在,出于某种原因,开发者必须将Qt安装文档解压缩到其他驱动器或者目录下。

不同目录下的Qt功能失效,QMake不能正常工作,插件也无法加载,也无法找到Qt素材。

为什么一切都不工作了?

在过去的版本中,Qt的配置会将安装路径编入qmake可执行文件和Qt5Core库中。QLibraryInfo中的程序试图在硬编码的前缀下面找到插件、素材和mkspecs,而这个前缀是用户configure时用-prefix参数输入的。

那么在Qt 5.14中是否可以移动安装包?

是的,从Qt 5.14.0开始,安装前缀可以自动根据Qt5Core库或可执行文件本身路径来确定,而不依赖于硬编码的路径。

当Qt使用可移动方式配置时,这一过程就可以自动化完成了。

除了Qt的静态构建,该特性默认是打开的。

如果您需要一个可移动的静态构建,则需要手动开启该功能:

configure -static -feature-relocatable ...

可移动静态构建的注意事项是,Qt内部不会自动连接翻译文件。

您必须同时部署Qt的翻译文件和应用程序。

与不可移动的构建的的差异是,在静态构建中,可移动的选项是默认关闭的。

如果不喜欢,我能把它关掉吗?

是的,您当然可以。

configure -no-feature-relocatable ...

将遵循老的处理方式。

例如,Linux发行版不需要可移动的Qt,因此可以关闭该功能。

参考

QTBUG-14150可以跟踪原始提出的问题。

在qtbase代码中的提交4ac872639ed0dd3ae6627e05bdda821f7d128500,介绍了可移动功能。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值