Skip to main content

Qt的安装包可以随意移动

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,介绍了可移动功能。

Blog Topics

Comments

Subscribe to our blog

Try Qt 6.11 Now!

Download the latest release here: www.qt.io/download

Qt 6.11 is now available, with new features and improvements for application developers and device creators.

We're Hiring

Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.