在阅读了这篇文章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 主题。我假设我缺少一个样式模块,我还不确定。
- 应用程序出于某种原因获得了一个控制台窗口。
第二点(控制台窗口)很关键。如何删除此背景窗口?请注意,额外的配置行对我不起作用,我在那里缺少什么?
编辑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”时添加,在其他操作系统中被忽略。我的猜测是 Qt 的 MinGW 端口变得混乱“我在 Linux 上运行,我需要忽略 windows/console 配置”。这意味着我需要编辑相应的 qmake.spec 文件。啊……我讨厌虫子。我仍然需要验证这是否解决了问题....