PATH D:/icu/bin;D:/icu/lib
-------------------------------------------------------------------------
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
将源码包解压到源码目录,新建编译目录,从控制台进入编译目录,
。
生成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
安装
安装完毕后,删除掉编译目录里面的src即可(删不删都不影响使用,但是src很大)
QtCreator仍在编译过程中。。。。。。。。。。。。
---------------------------------------------------------------------------------------------------
没有configure.exe的解决方法 【已测有效】
来源
注释掉qtbase\configure.bat中的一行文字
将
- if not exist %QTSRC%\.gitignore goto sconf
前面加上::注释掉 就是修改为
- ::if not exist %QTSRC%\.gitignore goto sconf
回到安装目录运行配置命令
---------------------------------------------------------------------------------------------------
必须注意的bug
来源:
----------------------------------------------------
在编译过程中,链接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】
【转自官方】
使用 MinGW编译ICU
Qt 5 / QtWebkit 需要ICU, which MinGW distributions do not ship.
预编译包
The ICU 项目官方网站 [site.icu-project.org] 为32和64位系统都提供了预编译库下载。但都只是MSVC2010运行环境下的。
按自己的需要进行编译- MSYS
- MinGW, 或者 MinGW-w64 工具链
如何编译- 打开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
使用 将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覆盖原文件
(修改方法附在后面)
从控制台进入QT5.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* 的指针
修改完毕后备份待用