在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的
qtbase
,qtbase
,应该给你足够的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立,维护和扩展。 它也适用于持续集成服务。 有泊坞窗图片也可用。