Кросс-компиляция Qt5 под Linux для Win x32/x64/static/shared

от автора


Цель статьи

Документирование получения системы кросс-компиляции под Linux для Windows x32/x64/static/shared и сборка последней на момент описания Qt 5.4.1 в лайт-версии (для указанных четырех целей). Для себя, глубоко-обожаемого, ну и для пользы обществу.

Назначение

Многие разработчики приходят к выводу, что использование *nix (в частности Linux) более предпочтительно для разработки приложений, используя фрэймворк Qt. И тому есть причины. Qt изначально ориентирована на *nix инструментарий, типа autotool, make, perl… И второй момент, под никсами есть прекрасный инструмент — valgrind, под виндй порта пока его не видел. Ну и последняя причина: просто удобно иметь набор инструментария для создания приложений под различные целевые платформы — в одном месте.

Почему лайт-версия Qt5

Фрэймворк-Qt имеет модульную структуру, но, увы, не совсем совершенную. Некоторые зависимости от внешних библиотек «вешаются» не на модуль, требующий эти библиотеки, а на Qt5Core. Иными словами, нужна вам эта библиотека, или нет — вынь да положЪ в дистрибутив. Пример тому «монстрик» — библиотека ICU. Весит она почти 25 метров! Зависимость вешается, как я упоминал выше, на Qt5Core… а требует ее модуль Qt5WebKit (который по сути в 99% случаев не используется, по крайней мере мной). Что делаем? Вырезаем и отрезаем. Хотите получить фулл-версию Qt5? Об этом упомяну в заключении. Поехали.

0. Сценарий сборки

Все шаги делаем последовательно. Желательно не объединять все скрипты в последовательную сборку по причине необходимости промежуточного «человечного» контроля. Разные дистрибутивы Линуха, разные среды исполнения, наборы инструментариев… Простой алгоритм: сделал очередной шаг, убедился в отсутствии ошибок, пошел делать следующий. Итак, сам сценарий:

  • 1. Предварительная подготовка
  • 2. Установка среды кросс-компиляции MXE
  • 3. Загрузка и настройка Qt 5.4.1
  • 4. Сборка комплектов Qt 5.4.1 для четырех целей (см. сабж)
  • 5. Прописка собранного в QtCreator

1. Предварительная подготовка

У вас установлен дистрибутив Линукса. Желательно все это делать на на продакшен-компе (не на живом Линуксе), а установленном в виртуальную машину. Я например, пользуюсь VMWare, но это дело вкуса. Выбор дистрибутива Линукса — так же дело вкуса. Лично я предпочитаю Gentoo Linux, собственно под ним всю эту кухню и настраиваю. Если есть сложности в настройке, у меня есть небольшая статейка по этому вопросу: «Установка и настройка Linux Gentoo под VMWare».

Итак, у вас есть настроенный Линукс и вы работаете не под рутом! Для дальнейшей работы вам нужно проверить присутствие следующих установленных пакетов, или доустановить:

$ sudo emerge \ app-arch/bzip2 \ app-arch/unzip \ app-arch/xz-utils \ app-shells/bash \ dev-lang/ruby \ dev-libs/libffi \ dev-libs/openssl \ dev-perl/XML-Parser \ dev-util/cmake \ dev-util/intltool \ dev-util/pkgconfig \ dev-util/scons \ dev-vcs/git \ sys-devel/autoconf \ sys-devel/automake \ sys-devel/bison \ sys-devel/flex \ sys-devel/gettext \ sys-devel/libtool \ sys-devel/patch \ net-misc/ntp \ www-client/lynx \ app-admin/sudo 

Вся дальнейшая установка будет производиться в каталог $HOME/dev. Если у вас таковой присутствует — либо переименовываете его, либо внимательно правите скрипты, которые будут приведены далее. Для всех манипуляций со скачиваемыми внешними файлами/скриптами/библиотеками будет использован каталог $HOME/setup. Все замечания выше относительно $HOME/dev — в силе и к этому каталогу.

2. Установка среды кросс-компиляции MXE

Предварительное замечание об MXE. Это отличнейшая система сборки тулчейнов для кросс-компиляции. Но есть одно «но». В данный момент не существует стабильной ветки. Авторы до поры до времени вели две ветки в своем git-репозитарии — стабильную и «разработческую». Сейчас ветки объединены. Разработка идет ну очень активно — изменения сбрасываются чуть ли не раз 1-3 дня. А это черевато тем, что «то работает сборка, то не работает». Некоторые важные для меня библиотеки, в частности клиентская часть PostgreSQL, собираются без ошибок, но в нерабочем состоянии. Потратил неделю не исследование явных косяков. Исправляем эти «недочеты». Итак:

$ mkdir -p $HOME/setup $ cd $HOME/setup $ wget http://majestio.tk/stuff/setup-scripts.tar.xz $ tar -xf setup-scripts.tar.xz $ rm -f setup-scripts.tar.xz 

Должны получить в каталоге $HOME/setup следующий набор скриптов:

1.setup-first.sh

#!/bin/sh  ########################################################################### ##                                                                       ##  ## Скрипт 1. Создание структуры каталогов для разворачивания системы     ## ##           кросс-компиляции средствами MXE (http://mxe.cc),            ## ##           собственно загрузку и первоначальную сборку                 ## ##                                                                       ##  ##                                       Majestio (C) http://majestio.tk ##     ###########################################################################  # # Порядок установки: # # 1. Создать в $HOME подкаталог, например $HOME/Setup  # 2. Скопировать туда этот скрипт и запустить # 3. Дождаться завершения #  # Структура подкаталогов будет в $HOME/dev # Набор тулчейнов MXE ищем в $HOME/dev/cross/mxe # # .........................................................................  if [ "$(whoami)" == 'root' ]; then    echo "Ахтунг: под учетной записью рута работать отказываюсь!"    exit 1  fi  RETDIR=`pwd` MXEHOME=$HOME/dev/cross/mxe  # создаем стркутуру каталогов и вынимаем MXE из git-репозитария -----------  mkdir -p $HOME/dev/{cross,projests,src,stuff,tools} cd $HOME/dev/cross  #    можно так:  # git clone https://github.com/mxe/mxe.git #    но лучче так: # wget http://majestio.tk/stuff/mxe-empty-26.05.2015.tar.xz # tar -xf mxe-empty-26.05.2015.tar.xz # rm -f mxe-empty-26.05.2015.tar.xz  wget http://majestio.tk/stuff/mxe-empty-26.05.2015.tar.xz tar -xf mxe-empty-26.05.2015.tar.xz rm -f mxe-empty-26.05.2015.tar.xz  # патчим файлик определения ABI проекта MXE -------------------------------  echo "#!/bin/sh" > $HOME/dev/cross/mxe/ext/config.guess echo "echo \"x86_64-pc-linux-gnu\"" >> $HOME/dev/cross/mxe/ext/config.guess  # делаем первоначальную сборку MXE с типом нитей win32 --------------------  cd $MXEHOME make MXE_TARGETS='x86_64-w64-mingw32.shared '`                    `'x86_64-w64-mingw32.static '`                   `'i686-w64-mingw32.shared '`                     `'i686-w64-mingw32.static ' gcc gmp winpthreads -j4 JOBS=4  # патчим mxe/src/gcc.mk на предмет добавления posix-threads ---------------  GCCMK=$MXEHOME/src/gcc.mk PLTMP=$$-$RANDOM.pl echo "open(F,\"$GCCMK\") || die \"Holy shit!\\n\";"                                                 >  $PLTMP echo "@In = <F>;"                                                                                   >> $PLTMP echo "close(F);"                                                                                    >> $PLTMP echo "open(F,\">$GCCMK\") || die \"Holy shit!\\n\";"                                                >> $PLTMP echo "foreach \$I(@In) {"                                                                           >> $PLTMP echo "  \$I =~ s/^(\\\$\(PKG\)_DEPS.+)\$/\$1 winpthreads/;"                                         >> $PLTMP echo "  \$I =~ s/^(.+?--libdir='\\\$\(PREFIX\).+)\$/\$1\n        --enable-shared=libstdc\+\+ \\\/;" >> $PLTMP echo "  \$I =~ s/^(.+?--enable-threads=)win32(.*)\$/\$1posix\$2/;"                                  >> $PLTMP echo "  print F \$I;"                                                                               >> $PLTMP echo "}"                                                                                            >> $PLTMP echo "close(F);"                                                                                    >> $PLTMP perl $PLTMP && rm -f $PLTMP  # пересобираем GCC с поддержкой posix-threads -----------------------------  cd $MXEHOME make MXE_TARGETS='x86_64-w64-mingw32.shared '`                    `'x86_64-w64-mingw32.static '`                   `'i686-w64-mingw32.shared '`                     `'i686-w64-mingw32.static ' gcc -j4 JOBS=4  # делаем промежуточный архив "пустой" системы кросс-компиляции ------------  echo "Делаем промежуточную архивацию ..." cd ..            tar -cJf mxe-winpthreads-empty.tar.xz ./mxe  # собираем дополнительные либы --------------------------------------------  cd $MXEHOME make MXE_TARGETS='x86_64-w64-mingw32.shared '`                    `'x86_64-w64-mingw32.static '`                   `'i686-w64-mingw32.shared '`                     `'i686-w64-mingw32.static ' zlib xz sqlite dbus \                 libiconv libodbc++ -j4 JOBS=4  # патчим и собираем PostgreSQL --------------------------------------------  cd $MXEHOME/src wget http://majestio.tk/stuff/postgresql-3-socket.patch PQSQL=$MXEHOME/src/postgresql.mk PLTMP=$$-$RANDOM.pl echo "open(F,\"$PQSQL\") || die \"Holy shit!\\n\";"                                                 >  $PLTMP echo "@In = <F>;"                                                                                   >> $PLTMP echo "close(F);"                                                                                    >> $PLTMP echo "open(F,\">$PQSQL\") || die \"Holy shit!\\n\";"                                                >> $PLTMP echo "foreach \$I(@In) {"                                                                           >> $PLTMP echo "  \$I =~ s/^(.+?--disable-rpath.+)\$/\$1\n        --disable-thread-safety \\\/;"              >> $PLTMP echo "  print F \$I;"                                                                               >> $PLTMP echo "}"                                                                                            >> $PLTMP echo "close(F);"                                                                                    >> $PLTMP perl $PLTMP && rm -f $PLTMP  cd $MXEHOME make MXE_TARGETS='x86_64-w64-mingw32.shared '`                    `'x86_64-w64-mingw32.static '`                   `'i686-w64-mingw32.shared '`                     `'i686-w64-mingw32.static ' postgresql -j4 JOBS=4  for PREFIX in "x86_64-w64-mingw32.shared" "x86_64-w64-mingw32.static" \               "i686-w64-mingw32.shared" "i686-w64-mingw32.static" ; do     echo "Description: PostgreSQL libpq library" > $MXEHOME/usr/$PREFIX/lib/pkgconfig/libpq.pc    echo "Url: http://www.postgresql.org/" >> $MXEHOME/usr/$PREFIX/lib/pkgconfig/libpq.pc    echo "Version: 9.2.4" >> $MXEHOME/usr/$PREFIX/lib/pkgconfig/libpq.pc    echo "Requires: " >> $MXEHOME/usr/$PREFIX/lib/pkgconfig/libpq.pc    echo "Requires.private: " >> $MXEHOME/usr/$PREFIX/lib/pkgconfig/libpq.pc    echo "Cflags: -I$MXEHOME/usr/$PREFIX/include" >> $MXEHOME/usr/$PREFIX/lib/pkgconfig/libpq.pc    echo "Libs: -L$MXEHOME/usr/$PREFIX/lib -lpq" >> $MXEHOME/usr/$PREFIX/lib/pkgconfig/libpq.pc    echo "Libs.private:  -lssl -lcrypto -lshell32 -lwsock32 -lws2_32 -lsecur32" >> $MXEHOME/usr/$PREFIX/lib/pkgconfig/libpq.pc    chmod 0644 $MXEHOME/usr/$PREFIX/lib/pkgconfig/libpq.pc done  cd $RETDIR         

2.setup-qt5.sh

#!/bin/sh  ########################################################################### ##                                                                       ##  ## Скрипт 2. Выкачка Qt 5.4.1 + небольшие косметические правки           ## ##                                                                       ##  ##                                       Majestio (C) http://majestio.tk ##     ###########################################################################  # # Порядок установки: # # 1. Зайти в каталог установки $HOME/Setup # 2. Скопировать туда этот скрипт и запустить # 3. Дождаться завершения #  # На выходе будет каталог qt5 #  # -------------------------------------------------------------------------  if [ "$(whoami)" == 'root' ]; then    echo "Ахтунг: под учетной записью рута работать отказываюсь!"    exit 1  fi  wget http://download.qt.io/official_releases/qt/5.4/5.4.1/single/qt-everywhere-opensource-src-5.4.1.tar.gz tar -xf qt-everywhere-opensource-src-5.4.1.tar.gz mv qt-everywhere-opensource-src-5.4.1 qt5 cd qt5/qtbase/mkspecs wget http://majestio.tk/stuff/win32-g++.static.tar.xz tar -xf win32-g++.static.tar.xz rm -f win32-g++.static.tar.xz cd ../.. wget http://majestio.tk/stuff/qt-5.4.1.patch patch -p1 -u < qt-5.4.1.patch rm -f qt-5.4.1.patch cd .. 

3.1.build-qt-x32-shared.sh

#!/bin/sh  ########################################################################### ##                                                                       ##  ## Скрипт 3.1 Создание сборки Qt 5.4.1 для Win x32 (shared)              ## ##                                                                       ##  ##                                       Majestio (C) http://majestio.tk ##     ###########################################################################  # # Порядок установки: # # 1. Зайти в каталог установки $HOME/Setup # 2. Скопировать туда этот скрипт и запустить # 3. Дождаться завершения #  # На выходе будет готовая сборка, размещенная в %HOME/dev/stuff #  # -------------------------------------------------------------------------  if [ "$(whoami)" == 'root' ]; then    echo "Ахтунг: под учетной записью рута работать отказываюсь!"    exit 1  fi  TARGET="i686-w64-mingw32.shared" MXE="$HOME/dev/cross/mxe/usr" PREFIX="$HOME/dev/stuff/qt5-$TARGET" export PATH=$MXE/bin:$PATH  PWD="`pwd`" LOG="$PWD/$TARGET-qt5.log___________"  mkdir "$TARGET-qt5.build" cd "$TARGET-qt5.build"  clear  OPENSSL_LIBS="`''"$TARGET"'-pkg-config' --libs-only-l openssl`" \ PSQL_LIBS="-lpq -lsecur32 `''"$TARGET"'-pkg-config' --libs-only-l openssl` -lws2_32" \ ../qt5/configure -prefix $PREFIX \ -opensource \ -confirm-license \ -release \ -shared \ -opengl desktop \ -force-pkg-config \ -no-use-gold-linker \ -no-glib \ -openssl \ -dbus \ -plugin-sql-psql \ -plugin-sql-sqlite \ -plugin-sql-odbc \ -qt-libpng -qt-libjpeg -qt-pcre -zlib -qt-freetype -no-kms -no-pch \ -nomake examples -nomake tests -silent -skip webkit \ -xplatform win32-g++ \ -device-option CROSS_COMPILE=$TARGET- \ -device-option PKG_CONFIG="$TARGET-pkg-config" 2>&1 | tee $LOG make -j4 2>&1 | tee -a $LOG make install 2>&1 | tee -a $LOG 

3.2.build-qt-x32-static.sh

#!/bin/sh  ########################################################################### ##                                                                       ##  ## Скрипт 3.2 Создание сборки Qt 5.4.1 для Win x32 (static)              ## ##                                                                       ##  ##                                       Majestio (C) http://majestio.tk ##     ###########################################################################  # # Порядок установки: # # 1. Зайти в каталог установки $HOME/Setup # 2. Скопировать туда этот скрипт и запустить # 3. Дождаться завершения #  # На выходе будет готовая сборка, размещенная в %HOME/dev/stuff #  # -------------------------------------------------------------------------  if [ "$(whoami)" == 'root' ]; then    echo "Ахтунг: под учетной записью рута работать отказываюсь!"    exit 1  fi  TARGET="i686-w64-mingw32.static" MXE="$HOME/dev/cross/mxe/usr" PREFIX="$HOME/dev/stuff/qt5-$TARGET"  PWD="`pwd`" LOG="$PWD/$TARGET-qt5.log___________"  mkdir "$TARGET-qt5.build" cd "$TARGET-qt5.build" clear  export PATH=$MXE/bin:$PATH #../qt5/configure --help|less #exit OPENSSL_LIBS="`''"$TARGET"'-pkg-config' --libs-only-l openssl`" \ PSQL_LIBS="-lpq -lsecur32 `''"$TARGET"'-pkg-config' --libs-only-l openssl` -lws2_32" \ ../qt5/configure -prefix $PREFIX \ -opensource \ -confirm-license \ -release \ -static \ -opengl desktop \ -force-pkg-config \ -no-use-gold-linker \ -no-glib \ -openssl-linked \ -dbus-linked \ -qt-sql-psql \ -qt-sql-sqlite \ -qt-sql-odbc \ -qt-libpng -qt-libjpeg -qt-pcre -zlib -qt-freetype -no-kms -no-pch \ -nomake examples -nomake tests -silent -skip webkit \ -xplatform win32-g++ \ -device-option CROSS_COMPILE=$TARGET- \ -device-option PKG_CONFIG="$TARGET-pkg-config" 2>&1 | tee $LOG make -j4 2>&1 | tee -a $LOG make install 2>&1 | tee -a $LOG 

3.3.build-qt-x64-shared.sh

#!/bin/sh  ########################################################################### ##                                                                       ##  ## Скрипт 3.3 Создание сборки Qt 5.4.1 для Win x64 (shared)              ## ##                                                                       ##  ##                                       Majestio (C) http://majestio.tk ##     ###########################################################################  # # Порядок установки: # # 1. Зайти в каталог установки $HOME/Setup # 2. Скопировать туда этот скрипт и запустить # 3. Дождаться завершения #  # На выходе будет готовая сборка, размещенная в %HOME/dev/stuff #  # -------------------------------------------------------------------------  if [ "$(whoami)" == 'root' ]; then    echo "Ахтунг: под учетной записью рута работать отказываюсь!"    exit 1  fi  TARGET="x86_64-w64-mingw32.shared" MXE="$HOME/dev/cross/mxe/usr" PREFIX="$HOME/dev/stuff/qt5-$TARGET" export PATH=$MXE/bin:$PATH  PWD="`pwd`" LOG="$PWD/$TARGET-qt5.log___________"  mkdir "$TARGET-qt5.build" cd "$TARGET-qt5.build"  clear  OPENSSL_LIBS="`''"$TARGET"'-pkg-config' --libs-only-l openssl`" \ PSQL_LIBS="-lpq -lsecur32 `''"$TARGET"'-pkg-config' --libs-only-l openssl` -lws2_32" \ ../qt5/configure -prefix $PREFIX \ -opensource \ -confirm-license \ -release \ -shared \ -opengl desktop \ -force-pkg-config \ -no-use-gold-linker \ -no-glib \ -openssl \ -dbus \ -plugin-sql-psql \ -plugin-sql-sqlite \ -plugin-sql-odbc \ -qt-libpng -qt-libjpeg -qt-pcre -zlib -qt-freetype -no-kms -no-pch \ -nomake examples -nomake tests -silent -skip webkit \ -xplatform win32-g++ \ -device-option CROSS_COMPILE=$TARGET- \ -device-option PKG_CONFIG="$TARGET-pkg-config" 2>&1 | tee $LOG make -j4 2>&1 | tee -a $LOG make install 2>&1 | tee -a $LOG 

3.4.build-qt-x64-static.sh

#!/bin/sh  ########################################################################### ##                                                                       ##  ## Скрипт 3.4 Создание сборки Qt 5.4.1 для Win x64 (static)              ## ##                                                                       ##  ##                                       Majestio (C) http://majestio.tk ##     ###########################################################################  # # Порядок установки: # # 1. Зайти в каталог установки $HOME/Setup # 2. Скопировать туда этот скрипт и запустить # 3. Дождаться завершения #  # На выходе будет готовая сборка, размещенная в %HOME/dev/stuff #  # -------------------------------------------------------------------------  if [ "$(whoami)" == 'root' ]; then    echo "Ахтунг: под учетной записью рута работать отказываюсь!"    exit 1  fi  TARGET="x86_64-w64-mingw32.static" MXE="$HOME/dev/cross/mxe/usr" PREFIX="$HOME/dev/stuff/qt5-$TARGET"  PWD="`pwd`" LOG="$PWD/$TARGET-qt5.log___________"  mkdir "$TARGET-qt5.build" cd "$TARGET-qt5.build" clear  export PATH=$MXE/bin:$PATH #../qt5/configure --help|less #exit OPENSSL_LIBS="`''"$TARGET"'-pkg-config' --libs-only-l openssl`" \ PSQL_LIBS="-lpq -lsecur32 `''"$TARGET"'-pkg-config' --libs-only-l openssl` -lws2_32" \ ../qt5/configure -prefix $PREFIX \ -opensource \ -confirm-license \ -release \ -static \ -opengl desktop \ -force-pkg-config \ -no-use-gold-linker \ -no-glib \ -openssl-linked \ -dbus-linked \ -qt-sql-psql \ -qt-sql-sqlite \ -qt-sql-odbc \ -qt-libpng -qt-libjpeg -qt-pcre -zlib -qt-freetype -no-kms -no-pch \ -nomake examples -nomake tests -silent -skip webkit \ -xplatform win32-g++ \ -device-option CROSS_COMPILE=$TARGET- \ -device-option PKG_CONFIG="$TARGET-pkg-config" 2>&1 | tee $LOG make -j4 2>&1 | tee -a $LOG make install 2>&1 | tee -a $LOG 

Скрипты не будут иметь атрибута «исполняемый» просто в целях безопасности — предотвращения «непреднамеренного случайного» запуска. Запускаем первый скрипт 1.setup-first.sh. Он создаст структуру подкаталогов $HOME/dev…, выкачает систему кросс-компиляции mxe, делает двойную сборку gcc тулчейнов (для обеспечения поддержки posix-threads), соберет основные базовые библиотеки, пропатчит и соберет клиентскую часть библиотеки PostgreSQL.

Важно: Если ваша хостовая система по ABI отличается от «x86_64-pc-linux-gnu», в скрипте вручную удалите патч ABI. Ищем по комментарию "# патчим файлик определения ABI проекта MXE". А лучше пропишете ваш.

$ sh 1.setup-first.sh 

3. Загрузка и настройка Qt 5.4.1

Запускаем скрипт 2.setup-qt5.sh. Его задача выкачать исходники Qt 5.4.1, развернуть их в подкаталог qt5/ и пропатчить нужное.

$ sh 2.setup-qt5.sh 

4. Сборка комплектов Qt 5.4.1 для четырех целей

Для, собственно, сборки четырех видов Qt 5.4.1 предназначены остальные скрипты:

  • 3.1.build-qt-x32-shared.sh
  • 3.2.build-qt-x32-static.sh
  • 3.3.build-qt-x64-shared.sh
  • 3.4.build-qt-x64-static.sh

Запуск производиться точно так же как и в предыдущем пункте:

$ sh скрипт 

Однако есть важное замечание, могущее помочь вам сэкономить время на сборку. Если у вас многоядерный компьютер — имеет смысл запускать сборки параллельно. Для этого вы открываете второй(третий, четвертый) терминал, и в терминале запускаете очередной скрипт. Лично мне удобно все действия проводить в дополнительном ssh-клиенте. Как показала практика, на моем Core i7 (4 ядра, с гипертрейдингом) — прирост общего времени сборки наблюдается при двух параллельно работающих сборках. Если более — производительность не возрастает, а чаще всего падает.

Итак, все четыре скрипта отработали. Что мы получили в результате?

$HOME/dev/cross/mxe/usr/bin — тут собраны исполняемые модули всех четырех тулчейнов
$HOME/dev/cross/mxe/usr/тулчейн — тут собраны заголовки и либы тулчейнов
$HOME/dev/stuff/сборки — тут собраны все виды Qt для последующей кросс-компиляции

Осталось все это подключить к использованию.

5. Прописка собранного в QtCreator

Самостоятельно выкачиваете Qt 5.4.1 для вашего линуха (ссылка на x32 или x64), самостоятельно производите установку. Проверяете работоспособность.

После этого регистрируете собранное вами. Открываем QtCreator, выбираем в главном меню «Инструменты» ► «Параметры» ► «Сборка и запуск». Далее, вся регистрация предусматривает три шага:

1) Регистрация компиляторов (Закладка «Компиляторы»)
2) Регистрация профилей Qt (Закладка «Профили Qt»)
3) Регистрация комплектов (Закладка «Комплекты»)

Шаг-1

Добавляя очередной компилятор, выбирайте тип «Особый». Нужный компилятор ищем в $HOME/dev/cross/mxe/usr/bin типа bla-bla-bla-g++. Ниже указываем путь к системной утилите make, типа /usr/bin/make. Далее выставляем ABI. Если выбрали static-версию, внизу добавьте mkspec — «win32-g++.static» (без кавычек). Остальные поля несущественны. Зарегали все четыре вида компиляторов, нажимаем «Применить»

Шаг-2

Переключаемся на закладку «Профили Qt». Добавляя профили ищем их в $HOME/dev/stuff/bla-bla-bla/bin/qmake. Зарегали все четыре профиля, нажимаем «Применить»

Шаг-3

Переключаемся на закладку «Комплекты». Добавляем очередной комплект, выбирая нужный компилятор + профиль Qt. В комплектах, где статическая сборка желательно прописать и mkspecs как на шаге-1. Зарегали все четыре комплекта, нажимаем «Применить»

Заключение

Вполне отдаю себе отчет — собранное может содержать определенные ошибки, т.к. собиралось далеко не автором ни Qt, ни PostgreSQL, даже не участником проекта MXE. Да и отсутствие простейших проверок во время сборки, не говоря уж о юнит-тестах, предполагает, что вы осознаете «сырость» сделанного. Тем не менее, после получения данного набора тулчейнов, я протестировал свои проекты, примеры из поставки Qt. В интересующих меня модулях (UI, PostgreSQL, http, QtScript, и ряда других) ошибок не обнаружил.

… Обещанное про фулл-сборку. Если вам очень повезет, и MXE, на момент вашего интереса будет в стабильном состоянии, получить фулл сборку очень просто:

$ mkdir -p $HOME/dev/{cross,src,stuff,projects} $ cd $HOME/dev/cross $ git clone https://github.com/mxe/mxe.git $ make MXE_TARGETS='x86_64-w64-mingw32.shared' gcc -j4 JOBS=4 $ make MXE_TARGETS='x86_64-w64-mingw32.static' gcc -j4 JOBS=4 $ make MXE_TARGETS='i686-w64-mingw32.shared' gcc -j4 JOBS=4 $ make MXE_TARGETS='i686-w64-mingw32.static' gcc -j4 JOBS=4 # # чтобы PostgreSQL-либа была рабочей - положите в каталог $HOME/dev/cross/mxe/src  # патчик, полученный из http://majestio.tk/stuff/postgresql-3-socket.patch # $ make MXE_TARGETS='x86_64-w64-mingw32.shared' qt5 -j4 JOBS=4 $ make MXE_TARGETS='x86_64-w64-mingw32.static' qt5 -j4 JOBS=4 $ make MXE_TARGETS='i686-w64-mingw32.shared' qt5 -j4 JOBS=4 $ make MXE_TARGETS='i686-w64-mingw32.static' qt5 -j4 JOBS=4 

Вангую, по этому варианту сборки вас ждет разочарование с вероятностью 87.14%, но если все будет без косяков, то полученные сборки Qt5 будут размещены в $HOME/dev/cross/mxe/usr/<тулчейн>/qt5

Всем удачного кодинга.

ссылка на оригинал статьи http://habrahabr.ru/post/258951/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *