首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Qt开发“跨平台”的最佳实践

使用Qt开发“跨平台”的最佳实践
EN

Stack Overflow用户
提问于 2011-01-29 20:51:38
回答 6查看 17.6K关注 0票数 35

根据qt.nokia.com的说法,Qt是一个“跨平台应用程序和UI框架”,允许您“编写一次针对多个平台的代码”。Qt是一个“完整的开发环境”,包含“在一个安装中使用Qt构建跨平台应用程序所需的工具”。Qt是一个“跨平台IDE”,它“运行在Windows、Linux/X11和Mac桌面操作系统上,允许开发人员为多个桌面和移动设备平台创建应用程序。”

“交叉编译”这个神奇的词并没有明确提到那些网站的脱口而出。然而,天真的读者可以推断,您可以下载用于开发的任何主机系统的Qt (包括Qt ),创建一个项目,并编写一些代码,您可以从这些代码中轻松地为Windows、Linux、Mac等生成可执行文件。通过“轻松”,我想到了一些东西,比如在构建设置对话框中勾选一些复选框,然后按下" build“按钮。

我还在找那些复选框!同时,我在这里和其他地方都发现了一些关于安装交叉编译器、安装额外二进制文件、重写qmake文件等的帖子。从营销角度来看,我希望IDE和SDK工具的“开箱即用”安装已经完全和直接支持了交叉编译。我漏掉了什么明显的东西吗?

如果没有,我有三种操作系统都可以使用的开发机器。我应该在这三个平台上安装Qt吗?如果我这样做了,我是否能够使用我使用Qt为Windows开发的Qt项目(或者仅仅是源代码),将其复制到我的Mac或Linux机器上,并使用该平台的Qt版本在那里构建它,而不会遇到一些重大问题?这是否是使用Qt为多个平台创建可执行文件的最佳实践,而不是在单个开发主机上安装交叉编译工具?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-01-31 11:50:30

Qt的口号是:

写一次,到处编译。

考虑到这一点,Qt并没有正式提供从特定平台交叉编译Qt应用程序到其他不同平台的任何开箱即用的解决方案。尽管绝对可行,但如果投入大量的工作和时间,Qt良好的通用实践将建议您直接在目标平台上构建Qt应用程序。这意味着,为应用程序构建Windows目标-- Windows机器,Mac目标在Mac机器上,Linux目标在Linux机器上,您猜对了( :- ),Linux机器。

这就是“写一次,到处编译”,在我看来,这是一个很好的词组合。否则,标签行可能是“写一次,编译所有东西”。

回到最初的问题,您甚至不需要为每个目标平台提供不同的物理机器,因为在当今良好的虚拟化解决方案时代,您可以轻松地设置几台虚拟机,并在同一台物理机器的不同平台上构建应用程序。

至于你的问题没有直接回答的其他问题:

我应该在这三个平台上安装Qt吗?如果我这样做了,我是否能够使用我使用Qt为Windows开发的Qt项目(或者仅仅是源代码),将其复制到我的Mac或Linux机器上,并使用该平台的Qt版本在那里构建它,而不会遇到一些重大问题?

是。次要问题是,在所有三个主要平台(Windows、Linux、Mac)或Mac高级集成或两者之间的托盘条集成问题上,您的应用程序可执行/二进制图标都是正确的。这些问题可以在不破坏代码的跨平台特性的情况下处理,方法是在编译器指令中正确封装平台特定的代码,比如#define。我还建议对应用程序所需的所有其他特定于平台的代码,或者如果您将广泛使用特定于平台的代码,将所有相关平台特定代码块分离为几个特定于每个平台的动态加载库(或共享库),但导出相同的抽象通用接口并根据需要加载/链接到它们。

这是否是使用Qt为多个平台创建可执行文件的最佳实践,而不是在单个开发主机上安装交叉编译工具?

在可能的情况下,您应该使用Qt (Qt或命令行工具)构建应用程序,因为像qmake这样的工具将承担手工处理Makefile中.moc文件的负担。但是,如果因为几个原因而变得不可能,例如。就像您的公司强制Visual开发(跨平台,嗯?)一样,有许多教程介绍了如何使用、GNU自动工具或CMake等构建系统来处理基于Qt的构建。尽管我建议坚持使用qmake,它是一个很好的“makefile”生成器,可以很容易地适应应用程序正确构建所需的任何平台特定的黑客,而不是使用一个更适合平台特定黑客的构建系统,然后尝试适应Qt对这些构建系统的需求。毕竟,如果您出于跨平台的原因在Qt中开发应用程序,那么Qt应该是应用程序的主要框架,而不是您可能使用的平台特定的api/代码或第三方库。

我希望我说得够清楚,也很有帮助。

PS:我也欢迎关于我在评论中所写内容的建议或修正/补充。

票数 24
EN

Stack Overflow用户

发布于 2011-01-29 21:11:38

您可以使用MinGW在Linux上交叉编译。交叉编译到Mac是不可能的,因为技术问题。要从图形用户界面上做到这一点并不容易,但是这里是一个很好的方法,可以交叉编译QtWebKit for Windows。可以应用于任何Qt项目。

票数 6
EN

Stack Overflow用户

发布于 2011-01-29 21:10:33

我不认为有交叉编译配置。

关于整个项目的可移植性,我会说“几乎”,因为我发现了一些恼人的小故障。尽管如此,您的源代码将100%可移植,在另一个平台上重新编译只需要在.pro中使用一些技巧。

我所做的就是只使用一个平台(Linux),并不时使用我的Windows机器和machine进行编译。我通常会遇到的是一些关于在哪里查找外部库或包含文件的指令。另外,在Mac上工作时,我必须在应用程序包中复制外部文件,以便程序能够找到它们。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4839350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档