Я хотел перенести приложение Qt 4, чтобы вместо этого использовать Qt 5. Эти инструкции не удалось из-за некоторых различий с тем, как MXE строит Qt 5, в том числе тот факт, что он использует модульные картотеки Qt, а не один большой архив.
Построение Qt 5 в Linux, для Windows
Ответ 1
Вот полные инструкции:
-
Получите его:
git clone https://github.com/mxe/mxe.git
-
Установить создавать зависимости
-
Построить Qt 5 для Windows:
cd mxe && make qtbase
Сначала будут построены его зависимости и инструменты кросс-сборки; Это займет меньше часа на быстрой машине с приличным доступом в Интернет.
Благодаря новому модульному характеру Qt 5 различные основные компоненты Qt теперь находятся в разных архивах. Выбрано выше,
qtbase
, должно предоставить вам достаточно возможностей для запуска обычных графических приложений, что все, что мне нужно для моего (маленького) приложения.Если вы хотите собрать все Qt 5, вам нужно запустить
make qt5
(вместоmake qtbase
). Обратите внимание, что для завершения потребуется намного больше времени, поэтому убедитесь, что вам нужна дополнительная функциональность. -
Перейдите в каталог вашего приложения и запустите инструмент генератора Qt Makefile:
<mxe root>/usr/bin/i686-w64-mingw32.static-qmake-qt5
-
Создайте свой проект:
make
-
Вы должны найти двоичный файл в каталоге. /release:
wine release/foo.exe
Некоторые примечания:
-
Это было протестировано на моем 64-разрядном Debian 8 и на Windows, конечно.
-
Вывод представляет собой 32-разрядный статический исполняемый файл, который будет хорошо работать на 64-разрядной Windows.
-
Если вы хотите выполнить 64-разрядный исполняемый файл, постройте Qt с помощью
make MXE_TARGETS=x86_64-w64-mingw32.static qtbase
Значение по умолчанию
MXE_TARGETS
равноi686-w64-mingw32.static
.
Ответ 2
Команда проверки git неверна. Теперь вам нужно получить свою стабильную ветку, иначе она не сможет построить.
git clone https://github.com/mxe/mxe.git
должен быть...
git clone -b stable https://github.com/mxe/mxe.git
Это само по себе устраняло все мои проблемы с построением qtbase, но при этом не оставляло ни одной qt-папки. Тогда цель qt5 потерпит неудачу с неясными ошибками. Удаленная папка, вышла стабильная и работала безупречно.
Ответ 3
Другой способ перекрестного компиляции программного обеспечения для Windows на Linux с помощью инструментальной цепочки mingw-w64 на Archlinux. Он прост в использовании и обслуживании и предоставляет последние версии компилятора и многих библиотек.
Сначала вам понадобится машина на основе дуги (достаточно виртуальной машины или контейнера докеров). Он не должен быть Arch Linux, производные также будут делать. Я использовал Manjaro Linux. Большинство пакетов mingw-w64 недоступны в официальных хранилищах Arch, но есть много в AUR. Менеджер пакетов по умолчанию для Arch (pacman) не поддерживает установку непосредственно из AUR, поэтому вам нужно будет установить и использовать обертку AUR, такую как pacaur или yaourt. Затем установка версии mtww-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
Это также установит toolchain mingw-w64 (mingw-w64-gcc
) и другие зависимости.
Кросс-компиляция проекта Qt для окон (x64) тогда прост как:
x86_64-w64-mingw32-qmake-qt5
make
Для развертывания вашей программы вам нужно будет скопировать соответствующие DLL из /usr/x86_64-w64-mingw32/bin/
.
Чтобы получить 32-битную версию, вы должны просто использовать i686-w64-mingw32-qmake-qt5
. Проекты на основе Cmake работают так же легко с x86_64-w64-mingw32-cmake
, а также с некоторыми другими системами сборки.
Этот подход работал очень хорошо для меня, был самым легким в настройке, обслуживании и расширении.
Это также хорошо сочетается с услугами непрерывной интеграции. Есть также изображения докеров.