在Linux上构build针对Windows的Qt 5

我想迁移我的Qt 4应用程序来使用Qt 5。 由于MXE构buildQt 5的一些差异,包括使用模块化的Qt tarball而不是一个大的tarball, 这些说明失败了。

以下是完整的说明:

  • 得到它:

    git clone https://github.com/mxe/mxe.git 
  • 安装构build依赖项

  • 为Windows构buildQt 5:

     cd mxe && make qtbase 

    这将首先build立它的依赖关系和交叉构build工具; 它应该需要不到一个小时的快速机器与体面的互联网接入。

    由于Qt 5的新模块化特性,各种主要的Qt组件现在处于不同的tar包中。 上面select的qtbaseqtbase ,应该给你足够的function来运行普通的GUI应用程序,这是我自己的(小的)应用程序所需要的。

    如果你想要构build所有的Qt 5,你需要运行make qt5 (而不是make qtbase )。 请注意,完成需要很长时间,因此请确保您需要额外的function。

  • 进入你的应用程序目录,运行Qt Makefile生成器工具:

     <mxe root>/usr/bin/i686-w64-mingw32.static-qmake-qt5 
  • build立你的项目:

     make 
  • 您应该在./release目录中find二进制文件:

     wine release/foo.exe 

一些说明:

  • 这在我的64位Debian 8上进行了testing,当然在Windows上进行了testing。

  • 输出是一个32位的静态可执行文件,在64位Windows上可以正常工作。

  • 如果你想要一个64位的可执行文件,build立Qt:

     make MXE_TARGETS=x86_64-w64-mingw32.static qtbase 

    默认的MXE_TARGETS值是i686-w64-mingw32.static

git checkout命令不正确。 你现在必须得到稳定的分支,否则将会失败。

 git clone https://github.com/mxe/mxe.git 

应该…

 git clone -b stable https://github.com/mxe/mxe.git 

这就解决了所有我与qtbasebuild设问题,但完成时不留下qt文件夹。 然后qt5目标会失败,带有模糊的错误。 删除的文件夹,检出稳定,并完美地工作。

另一种在Archlinux上使用mingw-w64工具链在Linux上交叉编译软件的方法。 它易于使用和维护,它提供了编译器和许多库的最新版本。

首先你需要一个基于arch的机器(虚拟机或docker容器就足够了)。 它不一定是Arch Linux,衍生产品也会这样做。 我用Manjaro Linux。 大多数的mingw-w64软件包在官方Arch软件仓库中都没有,但AUR中有很多 。 Arch(pacman)的默认软件包pipe理器不支持直接从AUR安装,因此您将需要安装和使用AUR包装(如pacaur或yaourt)。 然后安装mtw-w64版本的Qt5和Boost库就像下面这样简单:

 pacaur -Sy mingw-w64-qt5-base mingw-w64-boost #yaourt -Sy mingw-w64-qt5-base mingw-w64-qt5-boost #if you use yaourt 

这也将安装mingw-w64工具链( mingw-w64-gcc )和其他依赖项。 为Windows(x64)交叉编译一个Qt项目非常简单:

 x86_64-w64-mingw32-qmake-qt5 make 

要部署您的程序,您需要从/usr/x86_64-w64-mingw32/bin/复制相应的dll。

要获得32位版本,您应该只使用i686-w64-mingw32-qmake-qt5 。 基于Cmake的项目与x86_64-w64-mingw32-cmake以及其他一些构build系统一样容易。 这种方法对我来说工作得非常好,最容易build立,维护和扩展。 它也适用于持续集成服务。 有泊坞窗图片也可用。

Interesting Posts