Back to Blog home

Qt的安装包可以随意移动

Published on Tuesday March 03, 2020 by Jörg Bornemann | Comments

本文翻译自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,介绍了可移动功能。

Subscribe to Our Blog

Stay up to date with the latest marketing, sales and service tips and news.