この記事http://lukast.mediablog.sk/log/?p=155を読んだ後、Linux で mingw を使用して Windows アプリケーションをコンパイルすることにしました。これは、Linux から直接コンパイル、テスト、デバッグ、およびリリースできることを意味します。
このビルド スクリプトをハックして、アプリケーションをクロス コンパイルし、さらに ZIP ファイルにパッケージ化します。QMake のソース ビルドを使用していることに注意してください (これがサポートされていることをご存知でしたか? うわー...)。また、スクリプトが必要な DLL を自動的にプルすることにも注意してください。これは、すべてのインターネットが使用および悪用するためのスクリプトです。
#! /bin/sh
set -x
set -e
VERSION=0.1
PRO_FILE=blabla.pro
BUILD_DIR=mingw_build
DIST_DIR=blabla-$VERSION-win32
# clean up old shite
rm -fr $BUILD_DIR
mkdir $BUILD_DIR
cd $BUILD_DIR
# start building
QMAKESPEC=fedora-win32-cross qmake-qt4 QT_LIBINFIX=4 config=\"release\ quiet\" ../$PRO_FILE
#qmake-qt4 -spec fedora-win32-cross
make
DLLS=`i686-pc-mingw32-objdump -p release/*.exe | grep dll | awk '{print $3}'`
for i in $DLLS mingwm10.dll ; do
f=/usr/i686-pc-mingw32/sys-root/mingw/bin/$i
if [ ! -f $f ]; then continue; fi
cp -av $f release
done
mkdir -p $DIST_DIR
mv release/*.exe $DIST_DIR
mv release/*.dll $DIST_DIR
zip -r ../$DIST_DIR.zip $DIST_DIR
コンパイルされたバイナリは、私がテストした Windows7 マシンで動作します。質問に移ります:
- Windows でアプリケーションを実行すると、テーマが Windows7 のテーマではありません。スタイルモジュールが欠けていると思いますが、まだよくわかりません。
- アプリケーションは何らかの理由でコンソール ウィンドウを取得します。
2 番目のポイント (コンソール ウィンドウ) は重要です。このバックグラウンド ウィンドウを削除するにはどうすればよいですか? 余分な構成行が機能しないことに注意してください。何が欠けていますか?
編集1(いくつか計画中):
コンパイル行は次のとおりです。
i686-pc-mingw32-g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -o release/font_export.exe object_script.font_export.Release -L"/usr/i686-pc-mingw32/sys-root/mingw/lib" -lQtGui4 -lQtCore4
この-subsystem,windows
スイッチは「CONFIG+=windows」の場合にのみ追加され、他の OS では無視されます。私の推測では、Qt の MinGW ポートが「Linux で実行しています。Windows/コンソール構成を無視する必要があります」と混乱していると思われます。これは、対応する qmake.spec ファイルを編集する必要があることを意味します。ああ...私はバグが嫌いです。これで問題が解決することを確認する必要があります....