Qt"跨平台"开发的最佳实践

Jan*_*ich 32 qt qt-creator

根据qt.nokia.com,Qt是一个"跨平台的应用程序和UI框架",允许您"编写一次代码来定位多个平台".Qt SDK是一个"完整的开发环境",包含"在一次安装中使用Qt构建跨平台应用程序所需的工具".Qt Creator是一个"跨平台IDE","可在Windows,Linux/X11和Mac OS X桌面操作系统上运行,并允许开发人员为多个桌面和移动设备平台创建应用程序."

魔术词"交叉编译"没有明确提到那些网站的模糊.然而,一个天真的读者可能会原谅你推断你可以为你用于开发的任何主机系统下载Qt SDK(包括Qt Creator),创建一个项目,并编写一些代码,你可以从中轻松生成Windows的可执行文件, Linux,Mac等.通过"轻松",我想到的是在构建设置对话框中勾选一些复选框,然后按"构建"按钮.

我还在寻找那些复选框!同时,我在这里和其他地方发现了各种关于安装交叉编译器,安装其他二进制文件,重写qmake文件等的帖子.从市场营销中,我有点期望交叉编译已经完全直接支持IDE和SDK工具的"开箱即用"安装.我错过了一些明显的东西吗

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

Shi*_*nok 22

Qt的标语是:

写一次,到处编译.

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

这就是"一次编写,随处编译",在我看来,这是一个非常精心选择的单词组合.否则标签行可能是"写一次,编译所有内容".

回到最初的问题,您甚至不需要为每个目标平台使用不同的物理机,因为在这个时代的优秀虚拟化解决方案中,您可以轻松设置几个虚拟机并在不同平台上构建您的应用程序来自同一台物理机器.

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

我应该在所有三个平台上安装Qt Creator吗?如果我这样做,我可以期望能够使用Qt Creator开发的Qt项目(或者仅仅是源代码),例如Windows,将其复制到我的Mac或Linux机器上,然后构建它在那个平台上使用Qt Creator的版本,没有遇到一些重大问题?

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

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

您应该使用Qt SDK(Qt Creator或命令行工具)尽可能地构建应用程序,因为像qmake这样的工具将负担在Makefile中手动处理.moc文件的负担.但是,如果因为几个原因而变得不可能,例如.就像你的公司强加Visual Studio开发(跨平台吧?),有许多关于如何使用MS Visual Studio,GNU autotools或CMake等构建系统处理基于Qt的构建的教程.虽然我建议坚持使用qmake,这是一个很好的"make makefile"生成器,并且很容易适应你的应用程序构建正确所需的任何平台特定的黑客,而不是使用对平台特定黑客更舒适的构建系统然后尝试满足Qt对这些构建系统的需求.毕竟,如果您出于跨平台原因在Qt中开发应用程序,那么Qt应该是您的应用程序的主要框架,而不是您可能使用的特定于平台的API /代码或第三方库.

我希望我已经足够清楚并且乐于助人.

PS:我也欢迎就我在评论中所写的内容提出建议或修正/补充.


ism*_*ail 6

您可以使用MinGWLinux for Linux进行交叉编译.由于技术问题,无法交叉编译到Mac.有没有简单平均从GUI做到这一点,但这里是一个很好的操作方法上交叉编译QtWebKit的用于Windows.这可以应用于任何Qt项目.