Cara lain untuk mengkompilasi silang perangkat lunak untuk Windows di Linux adalah toolchain MinGW-w64 di Archlinux. Mudah digunakan dan dipelihara, dan menyediakan versi terbaru dari kompiler dan banyak pustaka. Saya pribadi merasa lebih mudah daripada MXE dan sepertinya lebih cepat mengadopsi versi perpustakaan yang lebih baru.
Pertama, Anda memerlukan mesin berbasis arch (mesin virtual atau wadah buruh pelabuhan sudah cukup). Tidak harus Arch Linux, turunannya juga bisa. Saya menggunakan Manjaro Linux. Sebagian besar paket MinGW-w64 tidak tersedia di repositori resmi Arch, tetapi ada banyak di AUR. Manajer paket default untuk Arch (Pacman) tidak mendukung penginstalan langsung dari AUR, jadi Anda perlu menginstal dan menggunakan pembungkus AUR seperti yay atau yaourt. Kemudian menginstal Qt5 dan Boost library versi MinGW-w64 semudah:
yay -Sy mingw-w64-qt5-base mingw-w64-boost
#yaourt -Sy mingw-w64-qt5-base mingw-w64-qt5-boost #if you use yaourt
Ini juga akan menginstal toolchain MinGW-w64 (mingw-w64-gcc
) dan dependensi lainnya. Mengkompilasi silang proyek Qt untuk windows (x64) semudah:
x86_64-w64-mingw32-qmake-qt5
make
Untuk menerapkan program Anda, Anda perlu menyalin dll yang sesuai dari /usr/x86_64-w64-mingw32/bin/
. Misalnya, Anda biasanya perlu menyalin /usr/x86_64-w64-mingw32/lib/qt/plugins/platforms/qwindows.dll
ke program.exe_dir/platforms/qwindows.dll
.
Untuk mendapatkan versi 32bit Anda hanya perlu menggunakan i686-w64-mingw32-qmake-qt5
alih-alih. Proyek berbasis Cmake bekerja sama mudahnya dengan x86_64-w64-mingw32-cmake
.Pendekatan ini bekerja dengan sangat baik bagi saya, adalah yang paling mudah untuk disiapkan, dipelihara, dan diperluas. Ini juga cocok dengan layanan integrasi berkelanjutan. Tersedia juga gambar buruh pelabuhan.
Sebagai contoh, katakanlah saya ingin membangun GUI pengunduh subtitle QNapi. Saya bisa melakukannya dalam dua langkah:
- Mulai wadah buruh pelabuhan:
sudo docker run -it burningdaylight/mingw-arch:qt /bin/bash
- Kloning dan kompilasi QNapi
git clone --recursive 'https://github.com/QNapi/qnapi.git'
cd qnapi/
x86_64-w64-mingw32-qmake-qt5
make
Itu dia! Dalam banyak kasus, akan semudah itu. Menambahkan perpustakaan Anda sendiri ke repositori paket (AUR) juga mudah. Anda perlu menulis file PKBUILD, yang seintuitif mungkin, lihat mingw-w64-rapidjson, misalnya.
(Ini adalah pembaruan dari jawaban @Tshepang, karena MXE telah berkembang sejak jawabannya)
Membangun Qt
Daripada menggunakan make qt
untuk membangun Qt, Anda dapat menggunakan MXE_TARGETS
untuk mengontrol mesin target dan toolchain Anda (32- atau 64-bit). MXE mulai menggunakan .static
dan .shared
sebagai bagian dari nama target untuk menunjukkan jenis lib mana yang ingin Anda buat.
# The following is the same as `make qt`, see explanation on default settings after the code block.
make qt MXE_TARGETS=i686-w64-mingw32.static # MinGW-w64, 32-bit, static libs
# Other targets you can use:
make qt MXE_TARGETS=x86_64-w64-mingw32.static # MinGW-w64, 64-bit, static libs
make qt MXE_TARGETS=i686-w64-mingw32.shared # MinGW-w64, 32-bit, shared libs
# You can even specify two targets, and they are built in one run:
# (And that's why it is MXE_TARGET**S**, not MXE_TARGET ;)
# MinGW-w64, both 32- and 64-bit, static libs
make qt MXE_TARGETS='i686-w64-mingw32.static x86_64-w64-mingw32.static'
Dalam jawaban asli @Tshepang, dia tidak menyebutkan MXE_TARGETS
, dan default digunakan. Pada saat dia menulis jawabannya, standarnya adalah i686-pc-mingw32
, sekarang menjadi i686-w64-mingw32.static
. Jika Anda menetapkan MXE_TARGETS
secara eksplisit ke i686-w64-mingw32
, menghilangkan .static
, peringatan dicetak karena sintaks ini sekarang sudah tidak digunakan lagi. Jika Anda mencoba menetapkan target ke i686-pc-mingw32
, itu akan menampilkan kesalahan karena MXE telah menghapus dukungan untuk MinGW.org (yaitu i686-pc-mingw32).
Menjalankan qmake
Saat kami mengubah MXE_TARGETS
, <mxe root>/usr/i686-pc-mingw32/qt/bin/qmake
perintah tidak akan berfungsi lagi. Sekarang, yang perlu Anda lakukan adalah:
<mxe root>/usr/<TARGET>/qt/bin/qmake
Jika Anda tidak menentukan MXE_TARGETS
, lakukan ini:
<mxe root>/usr/i686-w64-mingw32.static/qt/bin/qmake
Perbarui: Default baru sekarang adalah i686-w64-mingw32.static
Cukup gunakan M lintas lingkungan (MXE). Itu menghilangkan rasa sakit dari keseluruhan proses:
-
Dapatkan:
$ git clone https://github.com/mxe/mxe.git
-
Instal dependensi build
-
Build Qt untuk Windows, dependensinya, dan alat lintas-build; ini akan memakan waktu sekitar satu jam pada mesin cepat dengan akses internet yang layak; unduhannya sekitar 500 MB:
$ cd mxe && make qt
-
Buka direktori aplikasi Anda dan tambahkan alat lintas-bangun ke PATH variabel lingkungan:
$ export PATH=<mxe root>/usr/bin:$PATH
-
Jalankan alat pembuat Qt Makefile lalu buat:
$ <mxe root>/usr/i686-pc-mingw32/qt/bin/qmake && make
-
Anda harus menemukan biner di direktori ./release:
$ wine release/foo.exe
Beberapa catatan :
-
Gunakan cabang master dari repositori MXE; tampaknya mendapatkan lebih banyak cinta dari tim pengembangan.
-
Outputnya adalah biner statis 32-bit, yang akan bekerja dengan baik pada Windows 64-bit.
Oke, saya pikir saya sudah menemukan jawabannya.
Sebagian berdasarkan https://github.com/mxe/mxe/blob/master/src/qt.mk dan https://www.videolan.org/developers/vlc/contrib/src/qt4/rules.mak
Tampaknya "awalnya" saat Anda menjalankan configure (dengan -xtarget, dll.), konfigurasi kemudian menjalankan gcc "hosts" Anda untuk membuat file biner lokal ./bin/qmake
./configure -xplatform win32-g++ -device-option CROSS_COMPILE=$cross_prefix_here -nomake examples ...
lalu Anda menjalankan "make" normal dan membuatnya untuk mingw
make
make install
jadi
-
ya
-
hanya jika Anda perlu menggunakan sesuatu selain msvcrt.dll (defaultnya). Padahal saya belum pernah menggunakan yang lain jadi saya tidak tahu pasti.
-
https://stackoverflow.com/a/18792925/32453 mencantumkan beberapa parameter konfigurasi.