http://blog.chinaunix.net/uid-693168-id-3446114.html
建议所用软件均按以下版本,编译过程中不会出现fail,QtCreator可以使用官方版,慎用ShadowBuild
MinGW tdm-gcc-4.7.1-2.exe
(mingw32,里面的各种工具较新)
Perl ActivePerl-5.16.1.1601-MSWin32-x86-296175.msi
ICU icu4c-49_1_2-src(需要自行编译)
Python python-2.7.0.msi(编译webkit时,3.3会出错)
Ruby rubyinstaller-1.9.3-p327.exe(编译webkit时需要)
Qt qt-everywhere-opensource-src-5.0.0.tar.gz
QtCreator qt-creator-2.6.1-src.zip
-------------------------------------------------------------------------------------------------------
Qt5
配置编译安装
从控制台进入新的QT安装目录
设置环境变量
- set PATH=%PATH%;D:/icu/bin;D:/icu/lib;D:/Python33;D:/Perl/bin;D:/MinGW32/bin;D:/Ruby/bin
- set INCLUDE=%INCLUDE%;D:/icu/include
- set LIB=%LIB%;D:/icu/lib
配置命令
- configure -prefix %CD%\qtbase -opensource -debug-and-release -nomake tests -nomake examples -opengl desktop -no-vcproj -no-iwmmxt -no-cetest
- 如果要进行静态编译请加上 -static
- --prefix 参数,指定软件安装目录
编译命令
- mingw32-make -i -k 2>err.log
-
说明:-i 忽略错误-k 某些目标不能达成时仍然继续进行2>err.log 将发生的错误输出到当前目录的err.log文件中
在进行最后一步之前查看err.log,只要错误不影响正常使用就可以进行最后一步,否则需要进行错误排除,排除之后再次运行上面这个命令
安装
- mingw32-make install
后期工作
要正常使用Qt还需要在系统或者编译工具中设置环境变量
-
PATH D:/icu/bin; D:/icu/lib
mingw的一些可能用到的参数
-jN 多任务进行
-------------------------------------------------------------------------
QtCreator
配置编译安装(需要qmake)
准备:
QtCreator源码路径:D:/Qt/qt-creator-2.6.1-src
QtCreator编译目录:D:/Qt/qt-creator-2.6.1
QtCreator安装目录:D:/Qt/qt-creator
配置环境变量
- set PATH=%PATH%;D:/icu/bin;D:/icu/lib;D:/Python;D:/Perl/bin;D:/MinGW32/bin;D:/Ruby/bin
- set path=%path%;d:/qt/5.0.0/qtbase/bin
- set INCLUDE=%INCLUDE%;D:/icu/include;D:/qt/5.0.0/qtbase/include
- set LIB=%LIB%;D:/icu/lib;D:/qt/5.0.0/qtbase/lib
将源码包解压到源码目录,新建编译目录,从控制台进入编译目录,
设置好Qt环境变量
。
生成makefile
- qmake "QT_PRIVATE_HEADERS= D:/Qt/5.0.0/qtbase/include" D:/Qt/qt-creator-2.6.1-src/qtcreator.pro
编译
- mingw32-make -i -k 2>err.log
打开err.log查看错误,如果不是致命错误则进行下一步
- 这是其中一个可能发生的错误,原因是Qt5中这个模块declarative已经升级
- Project ERROR: Unknown module(s) in QT: declarative
安装
- mingw32-make install
安装完毕后,删除掉编译目录里面的src即可(删不删都不影响使用,但是src很大)
QtCreator仍在编译过程中。。。。。。。。。。。。
---------------------------------------------------------------------------------------------------
没有configure.exe的解决方法 【已测有效】
注释掉qtbase\configure.bat中的一行文字
将
- if not exist %QTSRC%\.gitignore goto sconf
前面加上::注释掉 就是修改为
- ::if not exist %QTSRC%\.gitignore goto sconf
回到安装目录运行配置命令
---------------------------------------------------------------------------------------------------
必须注意的bug
来源:https://bugs.webkit.org/show_bug.cgi?id=100592
----------------------------------------------------在编译过程中,链接
QtWebKitWidgetsd5.dll (位于
QtWebKit中)的时候可能会出现:
undefined reference to JSC::JSCell::classInfo() const.
这是个致命错误,会导致无法编译无法继续进行
解决方法:Alright, I was able to fix this locally by merging the content of JSDestructibleObject.h (which defines JSCell::classInfo()) into JSObject.h .
-------------------------------------------------------
the input line is too long/输入行太长
解决方法
尽量缩短qt5所在路径,使用
TCC LE 13.0代替cmd.exe可以解决问题的一半,另一半需要自己动手写批处理,批处理尽量分几次写,因为批处理大小似乎也有限制。
我是在编译到Qt5WebKitWidgets
的时候遇到这个问题的,批处理如下,需要根据实际情况更改文件中的路径,
Qt5WebKitWidgets为release部分,Qt5WebKitWidgetsd为debug部分。
---------------------------------------------------------------------------------------------------
编译icu【需要msys】
【转自官方http://qt-project.org/wiki/Compiling-ICU-with-MinGW】
使用 MinGW编译ICU
Qt 5 / QtWebkit 需要ICU, which MinGW distributions do not ship.
预编译包
The ICU 项目官方网站 [site.icu-project.org] 为32和64位系统都提供了预编译库下载。但都只是MSVC2010运行环境下的。
按自己的需要进行编译
使用
- MSYS http://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.11/MSYS-1.0.11.exe/download?use_mirror=garr.
- MinGW, 或者 MinGW-w64 工具链
- 下载 ICU4C 源码包:http://site.icu-project.org/download (e.g. icu4c-49_1_2-src.zip), unzip
- ICU 5.0 有bug,因此建议使用4.9
- 如果使用MinGW-w64, 需要下载补丁: http://www.icu-project.org/trac/changeset/31770/icu/trunk/source/tools/toolutil/pkg_genc.c?format=diff&new=31770
- 打开msys,进入icu源码包路径
- $ cd icu/source
设置mingw路径,如
-
$ export PATH =/c /Mingw -builds - 32 /bin :$PATH【这一步,mingw的路径要按实际的改动】
为 MinGW-w64打上补丁:
-
$ patch -Np3 -i .. /changeset_icu_trunk_source_tools_toolutil_pkg_genc. c_31770. diff
运行 configure && build:
-
$ . /runConfigureICU MinGW --prefix =$PWD /.. /dist
最后, run make && make install
-
$ make && make install
将bin, include, lib路径添加到编译环境的环境变量中,比如在cmd.exe下:
-
C :\ > set PATH =%PATH %;C :\icu\dist\bin ;C :\icu\dist\lib
-
C :\ > set INCLUDE =%INCLUDE %;C :\icu\dist\include
-
C :\ > set LIB =%LIB %;C :\icu\dist\lib
此时运行Qt的configure.exe,ICU便能够被检测到,and Qt links against the libraries.
关于ICU4C 5.0的buggcc 4.7.2/MinGW环境下,ICU4C 有个bug会导致编译失败 : http://bugs.icu-project.org/trac/ticket/9728
---------------------------------------------------------------------------------------------------
====================
折腾过程
================================
【以下为个人记录,仅作备忘】
12月19日digia发布了QT5正式版,遗憾的是没有发现mingw版本,得自己动手。
下载源码 qt-everywhere-opensource-src-5.0.0.tar.gz
进行各种常规配置,包括安装perl,phony
尝试 configure -h
竟然发现没有configure.exe
倒是在qtbase中找到了源码,限于水平有限,暂时编译不出来
然后经过各种折腾,发现把4.8.3的configure.exe拷贝到base下面可以运行,
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
尽管经过各种修改,通过了configure的阶段(具体过程在此不表),但是在进行mingw32-make的时候会出现找不到
qmodule.pri的情况,打开mkspace文件夹,发现只生成了qconfig.pri,看来想用老版本的configure.exe蒙混过关是行不通的,但是以上努力并没有白费,首先是生成了许多应有的文件,什么include,/qtbase/bin下面也有了qmake.exe。经过继续折腾,得到了5.0.0版本的configure.exe,过程如下
----------------------------------------------------------------------------------------------
将4.8.3的configure.exe复制到5.0.0的qtbase下面
将修改过的private文件夹复制到%QTDIR%\qtbase\include\QtCore目录
将修改过的qlibraryinfo.cpp 复制到\qtbase\src\corelib\global覆盖原文件
(修改方法附在后面)
从控制台进入QT
5.0.0
安装目录
set QTDIR=%CD%
Set path=%path%;D:\Perl\bin;D:\Python33;D:\mingw\bin;
4.8.3需要指定平台,若使用参数方式-platform配置完毕后,会提示%QTDIR%\qtbase\tools\configure\下面缺少qmake.conf,故使用环境变量方式
set QMAKESPEC=D:\Qt\5.0.0\qtbase\mkspecs\win32-g++
配置命令
configure -prefix %CD%\qtbase -opensource -fast
重新运行配置命令
运行结束后,进入
%QTDIR%\qtbase\bin\
应该已经生成了qmake.exe
删除%QTDIR%\qtbase\configure.exe
将%QTDIR%\qtbase\bin\加入到path
Set path=%path%;%QTDIR%\qtbase\bin\;
从控制台进入
%QTDIR%\qtbase\tools\configure\
qmake
出现
D:/5.0.0/qtbase/.qmake.conf:1: Cannot find feature qt_build_config
Project ERROR: Cannot load qmodule.pri!
打开\qtbase\qmake.conf
去掉load(qt_build_config)
qmake
mingw32-make install
运行完毕之后会在\qtbase\下面生成新的configure.exe
备份这个configure.exe
将整个qt5.0.0目录删除,重新解压源码包,将configure.exe拷贝到qtbase中,运行configure进行配置
---------------------------------------------------------------------------------------------------
使用4.8.3版本的configure.exe配置5.0.0之前所需修改的文件:
1、private文件夹:
以4.8.3目录下的configure.exe对5.0.0进行配置的过程中会提示找不到
private/XXXXX.h
解决方法如下:
进入
%QTDIR%\qtbase\include\QtCore\5.0.0\QtCore\private
会发现很多头文件,打开任意一个头文件都只有一行
现在要做的是把
../../../../../src/3rdparty/harfbuzz/src/harfbuzz-gpos-private.h"
改为
../../../src/3rdparty/harfbuzz/src/harfbuzz-gpos-private.h"
一共有一百多个,建议使用批处理,修改完毕后备份,待用
(会进行库文件路径设置的可以通过设置include路径达到相同效果,但是我进行了各种设置,始终没有成功)
使用
使用4.8.3版本的configure.exe配置5.0.0时还会出现另一个错误
提示
D:\Qt\5.0.0\qtbase\src\corelib\global\qlibraryinfo.cpp中
找不到qt_configure_prefix_path_strs定义
而同目录下的qconfig.cpp对这个变量进行了定义,
static const char qt_configure_prefix_path_str [512 + 12] = "qt_prfxpath=D:\\Qt\\5.0.0\\qtbase";
前者比后者多一个s,不知道是不是写错了,
qconfig.cpp 是自动生成的,所以只能在提示出错的cpp文件中进行修改
打开D:\Qt\5.0.0\qtbase\src\corelib\global\qlibraryinfo.cpp
所有qt_configure_prefix_path_strs
改为qt_configure_prefix_path_str
qt_configure_prefix_path_str[loc] + 12;
改为qt_configure_prefix_path_str+loc + 12;
因为从上下文来看,需要的是一个char* 的指针
修改完毕后备份待用
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一些问题
配置时如果不加-fast似乎会有点小问题
编译过程中出现乱码: 删除mingw/share/locale目录下的中文语言文件
mingw32-make 时出现 unrecognized command line option \"-fno-keep-inline-dllexport\"
表示mingw版本太低
提示Cannot find feature qt_build_config
解决方法:set QMAKEFEATURES=D:\Qt\5.0.0\qtbase\mkspecs\features
编译到webkit可能会出现
process_begin: CreateProcess(null,ruby XXXXXX) failed. make (e=234)
安装ruby并将其加入到path中可解决问题,但是发生问题的源头据说是mingw版本太低(准确说是其中gcc版本太低)
|
++++++++++++++++++++++++++++++++++++++++++++++++++
添加Icu支持
这个是从readme看来的,暂时不知道有什么用处,
从官网下载
解压到任意目录
将其中的include和lib设置到环境变量include和lib中,然后进行configure,qt就可以有mcu支持
+++++++++++++++++++++++++++++++++++++++++++++++++++++