之前有一篇討論如何用 Enigma Virtualbox 來將 QT 打包成單一執行檔,以進行佈署的文章。但用這個方法在 Windows 上進行的話,會需要很多手動的步驟,有點麻煩。
雖然印象中好像有另一套軟體,可以打包成單一執行檔,但最後還是沒想起來,於是就重新研究了一遍。剛才發現原來之前已經研究過了,是「 Linux 下交叉編譯 Windows 的 QT 程式」這篇文章的說明。不過想說都研究了,還是把過程寫下來好了。
編譯環境
其本上是使用 Ubuntu 20.04 來進行,現在發現用 docker 拉下ubuntu:20.04來做也是可以,就不用重新再灌系統了。在 18.04 有失敗過,所以建議用 20.04 來跑就好了。
編譯指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
apt-get update apt-get install \ autoconf automake autopoint bash bison bzip2 flex gettext \ git g++ gperf intltool libffi-dev libgdk-pixbuf2.0-dev \ libtool libltdl-dev libssl-dev libxml-parser-perl make \ openssl p7zip-full patch perl pkg-config python ruby scons \ sed unzip wget xz-utils g++-multilib libc6-dev-i386 libtool-bin lzip \ mesa-common-dev libglu1-mesa-dev apt-get install python3 python3-pip python-is-python3 pip install packaging mako-render git clone https://github.com/mxe/mxe.git cd mxe rm src/qtconnectivity.mk make MXE_TARGETS='x86_64-w64-mingw32.static i686-w64-mingw32.static' qt5 -j `nproc` |
這裡編譯的是 qt5,而且同時編譯出 x86和 x64 的版本,差不多要一個小時以上,若只要一種的請自行修改 MXE_TARGET這個參數。其中 qtconnectivity 因為編不過,也用不上,就直接把該.mk檔刪除,就不用編譯該項目了。
使用
完成後,檔案就在 usr/bin 下面了,請參考之前的文章描述的使用方式。