如何在 QtCreator 中进行远程编译

Posted

技术标签:

【中文标题】如何在 QtCreator 中进行远程编译【英文标题】:How to remote compile in QtCreator 【发布时间】:2015-03-17 15:17:03 【问题描述】:

我正在使用 Mac OS X 中的 QtCreator 开发一个应用程序,它必须是跨平台的。

我有一个 Mac OS X 作为主机。我还在虚拟机上安装了 MS Windows,在另一台虚拟机上安装了 Ubuntu:

Mac OS X:Qt 5.4.0 - 64bit - clang - Xcode 6.0 MS Windows:Qt 5.3.0 - 32bit - VC++ 2013 Ubuntu:Qt 5.3.0 - 64 位 - GCC

如何在 Mac OS 中开发我的应用程序并同时在其他平台 (Mac/Windows/Ubuntu) 中构建它?

QtCreator 中是否有任何远程编译器选项?

【问题讨论】:

最后,我们有一个交叉编译环境。每个目标架构都有不同的 make 文件(这意味着不同的 .pro 文件)。您需要一个可以为目标架构和为每个平台编译的任何第三方库编译的编译器。我们的环境变大了。 AFAIK,QtCreator 不支持这个开箱即用(但这是一个猜测)。我们的环境通常是为 C++ 编译而设置的,而不仅仅是 Qt。请注意,我们没有 Windows 目标。只有 *nix。 由于您已经拥有包含给定操作系统的 Qt 构建环境的虚拟机,只需将每个虚拟机连接到 Git,当您需要构建更改时,将它们从远程存储库拉到虚拟机,然后在该 VM 上编译它们。 @sashoalm,这是非常手动的!我正在寻找一个自动化的解决方案。 @S.M.Mousavi 我明白,只是我怀疑是否存在一个好的解决方案。我敢打赌,最终设置自动化解决方案需要大量研究,而设置它最终会花费您的时间而不是节省。 谢谢@sashoalm :-) 【参考方案1】:

我使用来自 Windows 的远程编译。我使用 plink 创建了自定义构建步骤,以免我使用密钥授权执行远程命令,从而启动构建。 Qt 创建者甚至可以解析返回的错误:)

如何配置它的简短说明:

    在 putty 中为您的用户创建公钥身份验证并配置与您的服务器的连接: https://www.howtoforge.com/how-to-configure-ssh-keys-authentication-with-putty-and-linux-server-in-5-quick-steps

    下载链接: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

    在您的 QtCreator 项目中配置“自定义流程步骤”以连接到您的服务器并开始编译。 假设您有:

    配置并命名为您的构建服务器的putty会话CentOS7_local 用户用户名 项目位于名为 projectname 的用户主目录中 你可以使用类似的东西(如果你需要一些更复杂的构建开始,你可以在服务器上创建一个 bash 脚本并调用它):

【讨论】:

你能详细写一下你是怎么做到的吗?你会像地狱一样投票! 老实说(不确定它是否可行,但会尝试一下)我认为创建一个正常的远程部署设置(Qt Creator 允许您设置目标设备,在这种情况下将是您可以向本地主机公开的容器)将是一个更流行的解决方案,它不仅允许远程构建,而且(如果您在运行 Creator 的主机上具有所有依赖项)通过在镜像中运行的 gdbserver 进行远程调试装入容器内。【参考方案2】:

我认为你不能在 Qt Creator 中进行远程编译,但你可以使用像 Jenkins 这样的持续构建系统来设置 distributed build environment。在您的所有 VM 中构建从属服务器将在您的 SCM(如 git 或 Subversion)中提交时进行编译。

这种方法的优点:

适用于 Linux、MacOS、Windows 等所有主要平台 .. 适用于所有主要编译器 无论 Qt Creator 支持如何,您都可以在任意数量的平台上构建 您可以轻松获得帮助,因为这是在许多专业系统中完成的 您可以分发您的开发成果 您可以使用任何 IDE 您拥有极大的灵活性和大量插件,让生活变得轻松

注意:还有更多 CI 系统,请参阅 here。

【讨论】:

这似乎是一个很好的解决方案。我会查一下。但在某些情况下,远程构建仍然有用。 没错,但这种方法会很复杂而且非常有限。例如。 Qt Creator 必须能够与外国编译器通信(例如不同版本和不同架构的 Visual Studio)。您什么时候想为所有可用平台编译 - 在每次编译时为您的主机平台?开发这样的功能不会导致 Qt Creator 的插件,而是会导致处理所有情况的独立工具。这些工具之一是 Hudson/Jenkins。 例如在调试的情况下。 调试仍然没有问题:您可以像以前一样在本机主机系统上进行开发、构建和调试。只要您想在任何其他平台上构建,您就可以手动或以预定方式发布构建。您可以安排构建在给定时间(每晚构建)、每次提交后、仅手动进行等等。当您开始在 Qt Creator 中构建时,您还可以通过在自定义构建步骤中添加触发构建命令来发布构建。所以我想您可以实现任何可能对您有用的场景。

以上是关于如何在 QtCreator 中进行远程编译的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 qtcreator 通过 ninja 构建系统远程部署应用程序

如何在 Qt Creator 中制作 .exe 文件

如何使用Qt插件在Qt中进行ROS开发

如何使用远程 Java 编译器?

QtCreator如何将Application Output显示到Text Edit控件中

Qt Creator 5.6 如何在一个项目中使用大量(3000+)小部件加速编译