2012年8月13日月曜日

ubuntu 12.04 64bitでWin32をクロスコンパイル2

ubuntu 12.04 64bitでWin32をクロスコンパイル1 のつづき


次にUbuntuのQtでWin32をクロスコンパイルしてみる。

まずQtCreatorで適当なサンプルプロジェクトを作ってみる。(当然Linuxむけ)
ここではtestqt とする。実行できるのを確認。

Qtの知識がない人は諦めるか勉強してください。

次にWindows用のQtをインストールします
$ wine qt-win-opensource-4.8.0-mingw.exe
これでWindows用のQtが私の場合
/home/kokawa2003/.wine/drive_c/Qt/
にインストールされます。
なお途中で出る警告のたぐい(mingwがないとか)は全て無視で。


次にmkspecを変更します
sudo cp -Rf /usr/share/qt4/mkspecs/win32-g++ /usr/share/qt4/mkspecs/win32-x-g++

で環境をコピーした後
sudo vi /usr/share/qt4/mkspecs/win32-x-g++/qmake.conf
で編集(別にviは好きなエディタに変更してください)赤字が変更部分

#
# qmake configuration for win32-g++
#
# Written for MinGW
#

MAKEFILE_GENERATOR      = MINGW
TEMPLATE                = app
CONFIG                  += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header
QT                      += core gui
DEFINES                 += UNICODE QT_LARGEFILE_SUPPORT
QMAKE_COMPILER_DEFINES  += __GNUC__ WIN32

QMAKE_EXT_OBJ           = .o
QMAKE_EXT_RES           = _res.o

QMAKE_CC                = i686-w64-mingw32-gcc
QMAKE_LEX               = flex
QMAKE_LEXFLAGS          =
QMAKE_YACC              = byacc
QMAKE_YACCFLAGS         = -d
QMAKE_CFLAGS            =
QMAKE_CFLAGS_DEPS       = -M
QMAKE_CFLAGS_WARN_ON    = -Wall
QMAKE_CFLAGS_WARN_OFF   = -w
QMAKE_CFLAGS_RELEASE    = -O2
QMAKE_CFLAGS_DEBUG      = -g
QMAKE_CFLAGS_YACC       = -Wno-unused -Wno-parentheses

QMAKE_CXX               = i686-w64-mingw32-g++
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS     = $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON  = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG    = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC     = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD   = $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON  = -frtti
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions

QMAKE_INCDIR            = /usr/i686-w64-mingw32/include
QMAKE_INCDIR_QT         = /home/kokawa2003/.wine/drive_c/Qt/4.8.0/include
QMAKE_LIBDIR_QT         = /home/kokawa2003/.wine/drive_c/Qt/4.8.0/lib

QMAKE_RUN_CC            = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CC_IMP        = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
QMAKE_RUN_CXX           = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CXX_IMP       = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

QMAKE_LINK              = i686-w64-mingw32-g++
QMAKE_LINK_C            = i686-w64-mingw32-gcc
QMAKE_LFLAGS            = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE    = -Wl,-s
QMAKE_LFLAGS_DEBUG      =
QMAKE_LFLAGS_CONSOLE    = -Wl,-subsystem,console
QMAKE_LFLAGS_WINDOWS    = -Wl,-subsystem,windows
QMAKE_LFLAGS_DLL        = -shared
QMAKE_LINK_OBJECT_MAX   = 10
QMAKE_LINK_OBJECT_SCRIPT= object_script
QMAKE_PREFIX_STATICLIB  = lib
QMAKE_EXTENSION_STATICLIB = a


QMAKE_LIBS              =
QMAKE_LIBS_CORE         = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
QMAKE_LIBS_GUI          = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_NETWORK      = -lws2_32
QMAKE_LIBS_OPENGL       = -lglu32 -lopengl32 -lgdi32 -luser32
QMAKE_LIBS_COMPAT       = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
QMAKE_LIBS_QT_ENTRY     = -lmingw32 -lqtmain

!isEmpty(QMAKE_SH) {
    MINGW_IN_SHELL      = 1
        QMAKE_DIR_SEP           = /
        QMAKE_QMAKE             ~= s,\\\\,/,
        QMAKE_COPY              = cp
        QMAKE_STREAM_EDITOR     = sed
        QMAKE_COPY_DIR          = cp -r
        QMAKE_MOVE              = mv
        QMAKE_DEL_FILE          = rm
        QMAKE_MKDIR             = mkdir -p
        QMAKE_DEL_DIR           = rmdir
    QMAKE_CHK_DIR_EXISTS = test -d
} else {
        QMAKE_COPY              = copy /y
        QMAKE_COPY_DIR          = xcopy /s /q /y /i
        QMAKE_MOVE              = move
        QMAKE_DEL_FILE          = del
        QMAKE_MKDIR             = mkdir
        QMAKE_DEL_DIR           = rmdir
    QMAKE_CHK_DIR_EXISTS        = if not exist
}

QMAKE_MOC               = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc
QMAKE_UIC               = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic
QMAKE_IDC               = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc

QMAKE_IDL               = midl
QMAKE_LIB               = i686-w64-mingw32-ar  -ru
QMAKE_RC                = i686-w64-mingw32-windres
QMAKE_ZIP               = zip -r -9

QMAKE_STRIP             = i686-w64-mingw32-strip
QMAKE_STRIPFLAGS_LIB    += --strip-unneeded
load(qt_config)

これでビルドできるような環境ができた。
 本当はQMAKE_INCDIR_QTはユーザーのホームでなく/usr/であるべきだが直さなかった。