qt - 使用 Qt 进行 "Cross-Platform"开发的最佳实践

标签 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 等生成可执行文件。通过“轻松”,我想到的是在build设置对话框中勾选一些复选框,然后按“构建”按钮。

我仍在寻找那些复选框!同时,我在这里和其他地方找到了各种关于安装交叉编译器、安装额外的二进制文件、重写 qmake 文件等的帖子。从市场营销来看,我有点期望交叉编译已经得到完全和直接的支持IDE 和 SDK 工具的“开箱即用”安装。我是否遗漏了一些明显的东西?

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

最佳答案

Qt 的口号是:

Write once, compile everywhere.

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

在我看来,“一次编写,到处编译”是一个非常好的组合词。否则,口号可能是“编写一次,编译所有内容”。

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

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

Should I just install Qt Creator on all three platforms? If I do that, can I expect to be able to take a Qt project (or maybe just the source code) that I have developed using Qt Creator for, say, Windows, copy it over to my Mac or Linux machine, and build it there using the version of Qt Creator for that platform, without running into some major issues?

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

Might that even be the best practice for using Qt to create executables for mutiple platforms, vs. installing cross-compilation tools on a single development host?

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

我希望我已经说得足够清楚并且有帮助。

PS:我也欢迎对我在评论中所写内容提出建议或修复/添加。

关于qt - 使用 Qt 进行 "Cross-Platform"开发的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4839350/

相关文章:

c++ - QDom 递归删除评论

qt - 调整插入 QGraphicsscene 和 QGraphicsView 中的 qvideowidget 的亮度

qt-creator - 未找到 QML 模块错误

c++ - QT Creator中如何使用FMOD工具?

c++ - QStandardItem 中的上标文本

c++ - 在快捷方式编辑器文本框中阻止应用程序级快捷方式

c++ - 发布版本中的 Qt 不可见组合框(但不在调试版本中)

c++ - 如果 visual studio 是编译器,如何在 Qt .pro 文件中知道?

android - 无法在 Qt Creator 中构建 Android APK

python - 从 QT Creator 转换对话框并将其合并到我的主窗口中的更好方法