web-dev-qa-db-ja.com

Qt CreatorをセットアップしてWindows実行可能ファイルをコンパイルする方法は?

リポジトリに同梱されているQt Creatorのバージョン。 Linux実行可能ファイルをすぐにコンパイルできます。ただし、Windowsアプリケーションをコンパイルするには、何らかの構成が必要なようです。

Mingw32ツールチェーンがインストールされており、QtライブラリのWindowsビルドにアクセスできます。

この作業を行うには、どのような手順を踏む必要がありますか?

3
Nathan Osman

こちら はそのためのガイドですQtライブラリをWineにインストールする

Qt SDKをダウンロードして、ワイン環境にインストールします。この記事の執筆時点では、バージョン4.7.4のみをテストしましたが、最新バージョンはnokia Webサイトから入手できます。互換性のために、Ubuntuバージョンに付属しているものと同じバージョンをダウンロードしてください。こちらで確認してください。

cd /tmp
wget http://get.qt.nokia.com/qt/source/qt-win-opensource-4.7.4-mingw.exe
wine qt-win-opensource-4.7.4-mingw.exe

最後のコマンドは、Windows環境にあるかのようにインストーラーを起動します。須藤として実行しないでください!インストール中に、MinGWが欠落しているというプロンプトが表示されます。これは完全に正常であり、無視してかまいません。

インストールが成功した後、何らかの理由でQtインストーラーによって自動的に設定されないため、Wineで環境変数PATHを設定する必要があります。単に実行する:

wine regedit

「HKEY_CURRENT_USER/Environment」を参照します。右クリックして、「パス」という名前の新しい文字列値を追加します。それをダブルクリックして編集し、値を「c:\ windows; c:\ windows\system; c:\ Qt\4.7.4\bin」に設定します。環境変数の設定方法の詳細については、Wineユーザーガイドを参照してください。

クロスコンパイルqmake環境の定義

トリッキーな部分になりました。 Qtプログラムは通常、正しいコンパイラオプションの設定を処理するqmakeを使用してコンパイルされます。このため、ターゲットプラットフォームには特定の設定ファイルが必要です。このような構成ファイルを作成して、クロスコンパイル用に調整する必要があります。テンプレートとしてwin32構成ファイルを使用するため、最初に関連環境のコピーを作成しましょう。

cp -Rfp /usr/share/qt4/mkspecs/win32-g++ /usr/share/qt4/mkspecs/win32-x-g++

/usr/share/qt4/mkspecs/win32-x-g++/qmake.confを編集し、デフォルトのコンパイラーgccおよびg ++を、他のオプションとともにMinGWパッケージで提供されるクロスコンパイラーに置き換える必要があります。これは次のようになります。

#
# 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        = i586-mingw32msvc-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       = i586-mingw32msvc-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/i586-mingw32msvc/include/
QMAKE_INCDIR_QT     = /home/matteo/.wine/drive_c/Qt/4.7.4/include
QMAKE_LIBDIR_QT     = /home/matteo/.wine/drive_c/Qt/4.7.4/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      = i586-mingw32msvc-g++
QMAKE_LINK_C        = i586-mingw32msvc-gcc
QMAKE_LFLAGS        = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl
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_LIBS      =
QMAKE_LIBS_CORE         = -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
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_COPY_DIR      = xcopy /s /q /y /i
    QMAKE_MOVE      = mv
    QMAKE_DEL_FILE      = rm
    QMAKE_MKDIR     = mkdir
    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-qt4
QMAKE_UIC       = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic-qt4
QMAKE_IDC       = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc-qt4

QMAKE_IDL       = midl
QMAKE_LIB       = ar -ru
QMAKE_RC        = i586-mingw32msvc-windres
QMAKE_Zip       = Zip -r -9

QMAKE_STRIP     = i586-mingw32msvc-strip
QMAKE_STRIPFLAGS_LIB    += --strip-unneeded
load(qt_config)

ヒント:構成ファイルのセットアップ中に問題が発生した場合は、このチュートリアルに付属するスクリプトをご覧ください。これにより、すべてのステップが自動化されます。

ボーナス:クロスアーキテクチャ環境をセットアップする

多くの新しいマシンは、64ビットアーキテクチャで構築されています。これらのいずれかで開発している場合は、古いコンピューターで実行できる32ビットバイナリも作成する可能性があります。 Ubuntuパッケージは両方のバージョンのライブラリを提供するため、これは簡単に実現できます。構成ファイルに追加する行は1行だけです。次を実行してください:

echo "QMAKE_LIBDIR_QT         = /usr/lib32/" >>/usr/share/qt4/mkspecs/linux-g++-32/qmake.conf

Windows環境に関しては、ノキアは32ビットバージョンのQtライブラリのみを提供しています。これは、両方のアーキテクチャと既に互換性があります。提示したセットアップでは、すでにこの種の実行可能ファイルが生成されます。 64ビット環境用にバイナリを最適化する場合、いくつかのオプションがあります。

Acquire a payed license for Qt from Nokia. Their support desk will then provide 64-bit binaries upon request.
Download the source code from the Nokia website, and compile Qt yourself for 64-bit environments.
Download and install unofficial (untrusted!) binaries you might be able to find in the Internet.
0
Tachyons

私ははるかに簡単な解決策を見つけました。Wineの下にQt Creatorをインストールするだけです。

VC++ 2008ランタイムファイルを最初にインストールするためにwinetricksを使用する必要がありましたが、その後は完全に機能しました。

1
Nathan Osman

免責事項:私は熱心なQt Creatorユーザーではないため、間違っている可能性があります。

Qt Creatorがカスタムコンパイラをサポートしている場合は、mingwコンパイラを1に設定し、ライブラリパスをmingwのincludeディレクトリに(Windowsヘッダーの適切なパスとともに)設定してみてください。

この方法は、過去に他のIDE(コードブロックなど)で機能していたので、手足を動かして、Qt Creatorでも同様に機能すると推測しています。

編集:

Qt Creatorで検索を行った後、これが可能かどうかはわかりません。

0
RolandiXor