• 7821阅读
  • 17回复

[提问]说说我自己编译Qt5.0.0的过程(Windows) [复制链接]

上一主题 下一主题
离线roywillow
 

只看楼主 倒序阅读 楼主  发表于: 2012-12-21
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2012-12-22) —

貌似很多人编译Qt5.0.0碰壁了呢,我说说我自己的编译过程吧。
首先credits一下某jerry童鞋,是他发现了我编译不通的时候的症结所在。

工具和环境准备:
编译器——MinGW-w64(x86_64-w64-mingw32-gcc-4.7.2-release-win64_rubenvb,是个w64的personal build)
Perl
Python
嗯,我没用什么msys
没有准备SSL和ICU(webkit就再见了)
解压好源码
找个地方创建个叫QtBuild之类的文件夹,作为编译的时候的工作目录(我比较喜欢在源码外编译,这样感觉更干净一些,也方便清理)
cmd下,临时设置一下环境变量,比如我的:
  1. set PATH=E:\Perl64\bin;E:\Python33;E:\GCC-4.7-MinGW\mingw64\bin;%PATH%


cd到QtBuild目录,执行【blablabla】\qt-everywhere-opensource-src-5.0.0\configure,估计会碰到什么qtbase\\configure.exe不是内部或外部命令之类的错误。然后找找qtbase目录下果断没有configure.exe。也就是说Qt发布的时候根本就没提供编译好的这东西……
逆流而上查原因,源码根目录下configure.bat通过perl调用旁边的configure,这个configure又调用qtbase里的configure.bat,然后这个东西,就在第45行:
  1. if not exist %QTSRC%\.gitignore goto sconf

和第109行
  1. :sconf
  2. %QTSRC%\configure.exe %*

也就是说,如果没找到.gitignore这个文件夹,那么就认为你已经有了configure.exe,直接调用之;然而对于我们来说,configure.exe也不存在。
这是不是默认用户是从git上得到的源码啊,并且还认为Qt发布后打包的源码应该已经准备好了configure.exe吧……
之后就比较明了了。某jerry的做法是把这一行注释掉。我的做法就有些麻烦。

手动在qtbase里创建.gitignore文件夹(cmd下,资源管理器不承认这个文件名),然后在QtBuild目录下调用qt-everywhere-opensource-src-5.0.0\configure -help(我不希望直接就这么开始编译了,想先看看参数),然后就在QtBuild\qtbase里找到了生成的configure.exe。
将编译好的configure.exe复制到qt-everywhere-opensource-src-5.0.0\qtbase中,删掉刚才创建的.gitignore文件夹。于是,这么一来我们的源码就比较类似于Qt4.x发布的打包好的源码了。
参考刚才输出的-help信息,确定好自己需要的参数,然后直接调用源码根目录下的configure.bat就可以了。
以下是我的参数
  1. ..\qt-everywhere-opensource-src-5.0.0\configure.bat -release -opensource -fast -prefix "E:/Qt5.0.0-w64" -c++11 -opengl desktop -no-qml-debug -no-vcproj -no-dbus -nomake tests -nomake examples -nomake demos -qt-zlib -qt-libpng -qt-freetype -qt-libjpeg -platform win32-g++

然后mingw32-make,结束后mingw32-make install。没有webkit这个庞然大物,我的T6570 CPU跑3个小时就结束了。

Qt5的构建参数与Qt4相比变化比较大,所以如果直接copy Qt4的参数估计会碰到很多问题。这个时候不用着急,翻错误信息,一个一个修正就好了。

我感觉我的编译还算顺畅(也多亏了某jerry的帮助),希望对大家有所帮助。
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 1楼 发表于: 2012-12-22
就在刚才我又发现了更根本一些的症结所在
http://qt-project.org/forums/viewthread/22932/
第2个回复的edit
我用的是tar.gz源码包,因为体积小,而其实zip才是为windows准备的……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线ugame
只看该作者 2楼 发表于: 2012-12-22
vs怎么编译?
离线呆呆很呆
只看该作者 3楼 发表于: 2012-12-22
都喜欢用那么长的参数啊 我一般就用一两个
configure -no-opengl
-no-opengl是因为默认的-opengl 会给出警告 然后编译出错

PS:话说我找了半天没找到-no-webkit 原来已经自动化了 如果安装了ICU就是-webkit 没有就是-no-webkit
离线roywillow

只看该作者 4楼 发表于: 2012-12-22
回 3楼(呆呆很呆) 的帖子
你连prefix都不用么……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线myseemylife

只看该作者 5楼 发表于: 2012-12-22
关于Opengl 的选项
我的机器上没有预装opengl和DXSDK。。。。
zip包下opengl desktop直接就不过了。。
Windows
Windows Graphics Drivers
QML2 requires OpenGL 2.1 or higher or Open GL ES 2.0 to work.

In Windows, two options are available:

1.Use the ANGLE-library [code.google.com] to translate OpenGL calls into DirectX (default)
2.Use the native OpenGL driver for your graphics card

A copy of ANGLE is bundled in Qt 5. To use Option 1, you need to install the DirectX SDK [msdn.microsoft.com] (Note: Starting from Windows Kit 8, this is included in the Windows SDK).

To use Option 2, you need to ensure that your graphics card driver supports OpenGL 2.1 or higher (Note: The stock Windows driver only supports OpenGL 1.1, which is insufficient), and pass `-opengl desktop’ to configure.exe.

这是官网wiki的
蠢笨的愚钝~
离线呆呆很呆
只看该作者 6楼 发表于: 2012-12-22
回 4楼(roywillow) 的帖子
你的意思是install完了之后删掉源码?
离线myseemylife

只看该作者 7楼 发表于: 2012-12-22
另外编译完qtbase之后。手动编译qtools的时候。有很多地方用到了opengl的头文件。编译不过。很头疼啊 。。看来opengl的环境还是很关键的
蠢笨的愚钝~
离线呆呆很呆
只看该作者 8楼 发表于: 2012-12-22
回 7楼(myseemylife) 的帖子
我直接-no-opengl了
离线myseemylife

只看该作者 9楼 发表于: 2012-12-22
回 8楼(呆呆很呆) 的帖子
做3d 各种旋转窗体。。不用opengl很坑吧。。。。还是装上跟着潮流走把
蠢笨的愚钝~
离线呆呆很呆
只看该作者 10楼 发表于: 2012-12-22
回 9楼(myseemylife) 的帖子
做文本编辑器 用不着那个
离线roywillow

只看该作者 11楼 发表于: 2012-12-22
回 9楼(myseemylife) 的帖子
我的mingw里已经带上了各种dx的库了,所以应该用不到dxsdk
angle的话我这里也不行,不管opengl的参数会提示可能会导致编译失败
然后我就传递了-opengl desktop的参数,就通过了
我用的是tar.gz包
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 12楼 发表于: 2012-12-22
回 6楼(呆呆很呆) 的帖子
如果不传prefix的话install会装到哪里?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线呆呆很呆
只看该作者 13楼 发表于: 2012-12-22
回 12楼(roywillow) 的帖子
不install 方便以后源码调试 否则只能反汇编调试了吧
比如调用setText崩溃了 可以进入Qt源码查看是怎么崩溃的
既然不删除源码那就没有install的必要了
离线roywillow

只看该作者 14楼 发表于: 2012-12-22
回 13楼(呆呆很呆) 的帖子
你要调试源码啊……
我只是用这个库罢了,编译完基本上就删掉源码了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线呆呆很呆
只看该作者 15楼 发表于: 2012-12-22
文档说明不清晰的也需要研究一下源码 比如QSyntaxHighlighter的关于BlockState的几个函数 看文档看了半天也没深入了解到底是什么事 然后查看源码 看完了顿时恍然大悟 呵呵
离线roywillow

只看该作者 16楼 发表于: 2012-12-22
回 15楼(呆呆很呆) 的帖子
不过我需要看源码都是再从源码包里解压出需要的再看
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线realfan

只看该作者 17楼 发表于: 2012-12-22

按roywillow方法,去试试。
有问题再向你请教哈
快速回复
限100 字节
 
上一个 下一个