Собсна ссылка говорит о том, что возможно :) Возможно даже инсталлеры делать. Рецепт простой, берем сырцы кути, берем либы и инклуды из вин сборки. configure делаем с -xplatform unsupported/win-cross-g++(за точность не ручаюсь). Собираем только qmake, moc, uir,rss. задаем install prefix, туда сваливаем инклуды и собранные утилиты. Потом пишем toolchain файл и радуешься
В списке рассылке говорится, что нельзя, т. к. FindQt.cmake выдает пути к системной Qt, а не к виндовой, скопированной в какую-то папку. В гите, по-моему, эта проблема исправлена.
Qmake это проблемы лишен, т. к. в spec-файле можно указать прямой путь к виндовой версии.
В списке рассылке говорится, что нельзя, т. к. FindQt.cmake выдает пути к системной Qt, а не к виндовой, скопированной в какую-то папку. В гите, по-моему, эта проблема исправлена.
~/develop/crossdev/mingw/usr/bin/qmake -v QMake version 2.01a Using Qt version 4.7.0 in /home/sauron/develop/crossdev/mingw/packages/../usr/lib </code> <code> ~/develop/crossdev/mingw/usr/bin/qmake -query QT_INSTALL_PREFIX:/home/sauron/develop/crossdev/mingw/packages/../usr QT_INSTALL_DATA:/home/sauron/develop/crossdev/mingw/packages/../usr QT_INSTALL_DOCS:/home/sauron/develop/crossdev/mingw/packages/../usr/doc QT_INSTALL_HEADERS:/home/sauron/develop/crossdev/mingw/packages/../usr/include QT_INSTALL_LIBS:/home/sauron/develop/crossdev/mingw/packages/../usr/lib QT_INSTALL_BINS:/home/sauron/develop/crossdev/mingw/packages/../usr/bin QT_INSTALL_PLUGINS:/home/sauron/develop/crossdev/mingw/packages/../usr/plugins QT_INSTALL_IMPORTS:/home/sauron/develop/crossdev/mingw/packages/../usr/imports QT_INSTALL_TRANSLATIONS:/home/sauron/develop/crossdev/mingw/packages/../usr/translations QT_INSTALL_CONFIGURATION:/etc/xdg QT_INSTALL_EXAMPLES:/home/sauron/develop/crossdev/mingw/packages/../usr/examples QT_INSTALL_DEMOS:/home/sauron/develop/crossdev/mingw/packages/../usr/demos QMAKE_MKSPECS:/home/sauron/develop/crossdev/mingw/packages/../usr/mkspecs QMAKE_VERSION:2.01a QT_VERSION:4.7.0
cat /home/sauron/develop/crossdev/mingw/cmake/linux-mingw32.cmake
# the name of the target operating system
SET(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C and C++
SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc)
SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)
SET(CMAKE_FIND_ROOT_PATH /usr/mingw32/usr/ /home/sauron/develop/crossdev/mingw/usr/)
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
Многие параметры по вкусу, главное здесь -xplatform.
4) Пишем тулчейн-файл:
i686-pc-mingw32.toolchain
# the name of the target operating system
SET( CMAKE_SYSTEM_NAME Windows )
# which compilers to use for C and C++
SET( CMAKE_C_COMPILER i686-pc-mingw32-gcc )
SET( CMAKE_CXX_COMPILER i686-pc-mingw32-g++ )
SET( CMAKE_FIND_ROOT_PATH /usr/i686-pc-mingw32 )
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )
Обратите внимание на последние два аргумента BOTH, они нужны, чтобы CMake нашёл библиотеки Qt в локальной директории установки /path/to/install/qt-4.7.0-mingw, если же на этапе конфигурации Qt она была задана относительно root-директории кросспилируемой платформы - достаточно будет значений ONLY.
5) Кросскоспилируем свою программу:
mkdir ~/myapp-build-mingw && cd ~/myapp-build-mingw
cmake -DQT_QMAKE_EXECUTABLE=/path/to/install/qt-4.7.0-mingw/bin/qmake -DCMAKE_TOOLCHAIN_FILE=/path/to/i686-pc-mingw32.toolchain /path/to/myapp/source/dir
make
Готово. На выходе должен получиться файл myapp.exe, копируем его, библиотеки Qt, а также libgcc_s_sjlj-1.dll, libstdc++-6.dll и zlib1.dll из директории /usr/i686-pc-mingw32/sys-root/mingw/bin на раздел с Windows и проверяем, что всё работает.
Да, забыл маленькую деталь. Перед сборкой нужно скопировать файл /usr/i686-pc-mingw32/sys-root/mingw/include/float.h в директорию $QTDIR/mkspecs/unsupported/win32-g++-cross. Это хак, тролли обещают в будущем исправить.