LINUX.ORG.RU

Ответ на: комментарий от Dendy

Большое спасибо за первую ссылку. Гадал, как ему эти переменные подсунуть...

flareguner
() автор топика

http://www.qutim.org/uploads/win_git/qutim-latest.exe

Собсна ссылка говорит о том, что возможно :) Возможно даже инсталлеры делать. Рецепт простой, берем сырцы кути, берем либы и инклуды из вин сборки. configure делаем с -xplatform unsupported/win-cross-g++(за точность не ручаюсь). Собираем только qmake, moc, uir,rss. задаем install prefix, туда сваливаем инклуды и собранные утилиты. Потом пишем toolchain файл и радуешься

Gorthauer ★★★★★
()
Ответ на: комментарий от flareguner

> Только вот вопрос: как ему скормиь заголовочные файлы для винды?

Это задача toolchain-файла. У нас два часа до полуночи (-: Предлагаю кросскомпилировать наперегонки.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Кстати с cmake'ом кросскомпиляция как часы работает.

Gorthauer ★★★★★
()
Ответ на: комментарий от Gorthauer

Слишком замутно все это.... не могли бы вы дать пример тулчейна просто?Должен быть у кого-то готовы.

flareguner
() автор топика

В списке рассылке говорится, что нельзя, т. к. FindQt.cmake выдает пути к системной Qt, а не к виндовой, скопированной в какую-то папку. В гите, по-моему, эта проблема исправлена.

Qmake это проблемы лишен, т. к. в spec-файле можно указать прямой путь к виндовой версии.

http://www.cmake.org/pipermail/cmake/2009-June/030275.html
http://www.mail-archive.com/cmake@cmake.org/msg29404.html
http://public.kitware.com/Bug/view.php?id=10823

reader
()
Ответ на: комментарий от reader

В списке рассылке говорится, что нельзя, т. к. FindQt.cmake выдает пути к системной Qt, а не к виндовой, скопированной в какую-то папку. В гите, по-моему, эта проблема исправлена.

Решается подсовыванием правильно собранного qmake'а

Gorthauer ★★★★★
()
Ответ на: комментарий от Gorthauer

> Решается подсовыванием правильно собранного qmake'а

То есть правкой FindQt.cmake? Об это по ссылкам тоже написано.

reader
()
Ответ на: комментарий от flareguner

> Бгг.... легче написать qmake project для винды.

Я так и сделал в свое время. Делал вот по этой инструкции: http://silmor.de/29

reader
()
Ответ на: комментарий от flareguner
 ~/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)
cat /home/sauron/develop/crossdev/mingw/env.sh 
#!/bin/sh

SDK_DIR=$HOME/develop/crossdev/mingw
QTDIR=$SDK_DIR/usr
export QTDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH

Вот собсна и все.

Gorthauer ★★★★★
()
Ответ на: комментарий от Gorthauer

Спасибо. Я так понимаю, виндовые хедеры и либы пихать в префикс /usr/mingw32/usr? А qmake у вас откуда?

flareguner
() автор топика
Ответ на: комментарий от Gorthauer

Черт, в дебиане qt4-qmake вытягивает сорцы всего qt4-x11... пипец. Как быть? Нужно для Qt 4.7

flareguner
() автор топика
Ответ на: комментарий от Gorthauer

Не могли бы вы со мной связаться? (Координаты в профиле)

flareguner
() автор топика

Ну что ж, всё оказалось довольно просто. На случай если ещё остались вопросы - вот моя схема на примере openSUSE.

1. Подключаем репозиторий http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_11.3/

2. Устанавливаем необходимые пакеты:
а) для сборки: mingw32-cross-binutils, mingw32-cross-cpp, mingw32-cross-gcc, mingw32-cross-gcc-c++, mingw32-filesystem, mingw32-headers, mingw32-runtime, mingw32-win_iconv-devel, mingw32-zlib-devel
б) для запуска результата: mingw32-libgcc, mingw32-libstdc++, mingw32-zlib

3) Собираем Qt:

./configure -prefix /path/to/install/qt-4.7.0-mingw -no-accessibility -no-qt3support -no-exceptions -nomake demos -nomake examples -nomake tools -nomake docs -nomake translations -no-webkit -xplatform unsupported/win32-g++-cross -opensource -confirm-license
make
make install

Многие параметры по вкусу, главное здесь -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 и проверяем, что всё работает.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Да, забыл маленькую деталь. Перед сборкой нужно скопировать файл /usr/i686-pc-mingw32/sys-root/mingw/include/float.h в директорию $QTDIR/mkspecs/unsupported/win32-g++-cross. Это хак, тролли обещают в будущем исправить.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Спасибо вам большое. Когда придет время, то так и попробую собрать.

flareguner
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.