删除文章

确定要删除这篇文章吗?

取消
确定

Windows下使用VS2013编译Qt5.6源码

     阅读(899)  2017-02-08 11:31:39

Windows下使用VS2013编译Qt5.6源码

下载Qt开源源码

http://download.qt.io/archive/qt/
我下载的是:qt-everywhere-opensource-src-5.6.1-1.zip

确保下面工具被安装

ICU源码编译,编译QtWebKit必须的

  • ICU源码下载:http://site.icu-project.org/
  • 解压后进入source->allinone
  • 用vs2013打开allinone.sln分别编译debug和release会自动生成include、lib、bin目录,等会编译Qt源码之前需要将它们增加到环境变量。

编译前需要注意的

  • Qt源码目录要简短,防止文件路径太长造成的编译错误。最好是将qt-everywhere-opensource-src-5.6.1-1改为src之类简短的名字
  • 目录尽量用英文名
  • 当编译QtWebKit的时候还需要修改系统的区域和语言,否则编译不过。你也可以先不设置(因为设置之后编译工具编译过程中的中文显示不出来),等出现问题的时候再设置重启电脑后,不需要再进行configure,使用nmake继续之前的编译 > 打开控制面板->区域和语言->管理->更改系统区域设置->英语(美国)
  • 使用管理员权限打开VS2013 开发人员命令提示工具
  • 在上面工具中,设置ICU生成的目录到环境变量
    > SET INCLUDE=F:\qt\icu\include;%INCLUDE%
    > SET LIB=F:\qt\icu\lib;%LIB%
    > SET PATH=F:\qt\icu\lib;%PATH%
    > SET PATH=F:\qt\icu\bin;%PATH%
  • cd到Qt源码目录(qt.pro这个目录)
  • configure -prefix ./qtbase -opengl desktop -force-debug-info -nomake tests > -opengl desktop可以支持XP系统 > -force-debug-info是为了生成release下的pdb文件,对于调试release下的dump很有用
  • nmake > 使用nmake命令开始编译
  • nmake install > 编译完成后使用nmake install进行安装,安装后的所有文件都在qtbase目录下的bin/qtbase中

我编译中遇到的问题

  • NMAKE:fatal error U1077 ninja.exe返回代码0x1 NMAKE:fatal error U1077 nmake 返回代码0x2,编译qtwebengine的时候出错,修改上面提到的区域和语言,重启电脑后继续nmake就可以了
  • 在编译examples\webenginewidgets\simplebrowser\webview.cpp的时候提示QDebug错误 > 解决方法:打开源码增加如下头文件,接着使用nmake继续编译
    #include <QDebug>
  • 如果要重新进行configure,最好是解压一份新的qt-everywhere-opensource-src-5.6.1-1在新目录中进行
  • 因为编译要很久,如果人不在电脑旁的话更改电源选项不要让电脑进入睡眠状态
  • 在使用windeployqt.exe的时候提示“Unable to read qconfig.pri”,在bin中增加qt.conf文件,内容如下:

    [Paths]
    Prefix=..
    
  • 为了兼容XP可能还需要:

    增加opengl32sw.dll,platforms插件中使用官方发布的对应版本替换qwindows.dll

文章评论

Keep it simple,stupid
文章数
292
总访问量
356086
今日访问
293
最近评论

xuehaoyun : 很不错,来围观一下
tujiaw : 抱歉csdn code服务关闭了,这个代码我也找不到了
于淞 : 你好,这个文章的源码能分享一下吗,songsong9181@163.com,谢谢了 上面的写错了
于淞 : 你好,这个文章的源码能分享一下吗,838106303@163.com,谢谢了 上面的链接不能用了
tujiaw : 多谢多谢
essaypinglun college-paper.org : 很好的博客,赞赞
Folly : 这个实现有点奇怪,Qt为什么没有统一的比对方法。
过多s : alert("hello, world!")
tujiaw : 还不错哦
回到顶部