- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据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/
我正在尝试自己编译跨平台工具链。 当我编译 binutils-2.22 时,它成功了,但为什么会出现“检查我们是否正在交叉编译...否”?我想应该是"is",对吧? 我的主机是运行 ubuntu 的
设置: 有远程测量站,有集中收集/处理/呈现服务器(带有网络服务器),还有观测站,为客户显示收集到的数据。 这些观测站由简单的嵌入式计算机组成,配备网络浏览器,以信息亭模式工作,每个观测站显示来自中央
我对 Spark 和 Scala 很陌生,我正在编写 Spark SQL 代码。我可以在我的逻辑中应用 CROSS JOIN 和 CROSS APPLY。在这里,我将发布必须转换为 Spark SQL
警告是: jquery-1.9.1.js:8526 跨源读取阻止 (CORB) 阻止跨源响应 https://www.metaweather.com/api/location/search/?quer
我正在尝试对用户进行身份验证,但由于Cross-Origin Read Blocking (CORB) blocked 问题我的 login.ts 代码是 if (this.plugins.isOnl
这是我的表格 public class TaskForm extends WebForm { public TaskForm(){ this(new TaskModel());
首先,对不起我的英语语言不好,我是初学者程序员。在我的项目中,我使用线程类,但完成后我看到了这个异常: Cross-thread operation not valid: Control 'lblp4
我目前正在为一个项目开发前端(VueJS),为了测试我的登录和注册逻辑,我使用 laravel 作为后端,尽管我们实际上将使用 springboot 作为后端。我在桌面上编码,一切正常。所以我开始使用
我一直认为,就主要浏览器在不同平台上的渲染而言,唯一的区别是操作系统的底层字体渲染技术,其他一切都依赖于浏览器中包含的相同库。 就我的研究而言,前端开发人员要么相信,要么不相信。似乎我们可以选择任何一
我需要在我正在处理的网站中显示一些交互式(附加 DOM 监听器等和事件处理)矢量图形。 W3C 推荐了 SVG,尽管 Internet Explorer 支持仍然无法识别这种格式,这是必须的(对于公共
子域是否有跨域策略限制? 如果我在 paint.xxxx.com 上有申请这是处理来自 image.xxxx.com 的图像,有没有跨域问题? 我问这些问题,因为我正在考虑在子域上放置一个代理。 最佳
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
一个项目迫在眉睫,我将要编写的一些代码可能会部署在潜在客户碰巧拥有的任何硬件上。它是一个 24/7 全天候运行的业务应用程序,因此我设想大多数主机将是服务器类型的机器,但较小的客户端可能只有一台简单的
首先,我不反对Opera。似乎当我遇到跨浏览器问题并进行一些研究时,总能找到“解决办法”,但是随后我看到一条评论,说我正在查看的跨浏览器解决方案无法在Opera中使用,这是一种愚蠢的评论。 我应该在乎
作为优秀的开发人员,我们尽可能保持我们的代码符合标准,以帮助平台之间的移植。但是有哪些工具可以帮助我们以统一的方式跨多个平台构建代码。 *nix 家族有 make但 Windows 需要 nmake
我目前正在构建浏览器帮助对象。 的事情之一BHO要做的是绕过跨域策略进行跨站请求。 为此,我公开了 __MyBHONameSpace.Request使用 WebClient 的方法内部。 然而,我想到
我开发了一个 NP API 插件并正在使用它。我观察到以下两件事 当我第一次安装插件时,我需要重新启动我的 mac os 以加载插件。 每当我更新插件时,我都需要重新启动浏览器。 我想在不重新启动浏览
浏览器在接收到“足够”的数据后或数据停止流入后呈现内容(例如,达到内容长度)。 我要慢慢地将数据流式传输到浏览器;为此,我必须解决此数据缓存问题。 例如,不是发送 40 字节的 JavaScript,
我搜索了一些关于跨平台编程开发的文献,但没有找到真正好的东西。 我不是在寻找像 Java 那样的跨平台虚拟机。 有没有关于这方面的书籍或文献? 最佳答案 我会说这归结为: 不使用非标准的“标准库”功能
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
我是一名优秀的程序员,十分优秀!