Qt5.0编译指南(VisualStudio2010)

1 基础环境

->关于Qt源代码下载

Qt版本更替较快,一般在google里搜索Qt Download即可得到链接:https://qt-project.org/downloads ,可以在下面找到源代码下载链接.可以看到Qt的下载站点类似ftp站点:Qt目前最新的源代码包位于https://download.qt-project.org/official_releases/qt/5.0/5.0.2/single/,通过URL可以得到https://download.qt-project.org/提供了所有Qt相关的内容下载,下载Qt安装包和源代码包均可按图索骥.

采用git下载源代码编译可以参考链接:https://qt-project.org/wiki/Building_Qt_5_from_Git.

->关于Qt的Windows平台需求

https://qt-project.org/doc/qt-5.0/qtdoc/requirements-win.html中描述了Qt的Windows平台需求,其中

  • ANGLE为替代OpenGL的图形支持库,ICU为UNICODE及国际化支持库;
  • OpenSSL支持同样依赖于外部库.见https://qt-project.org/doc/qt-5.0/qtdoc/requirements.html
  • 编译需要Perl,创建QtWebKit依赖与Python及Ruby;
  • jom为替代nmake的构建工具,可以利用多核CPU来加速构建;
  • 使用Windows SDK 7.1编译时需要按照以下顺序完成SDK安装:
    • Install Visual Studio 2010
    • Install Windows SDK 7.1
    • Install Visual Studio 2010 SP1
    • Install Visual C++ 2010 SP1 Compiler Update for the Windows SDK 7.1

ICU为UNICODE支持库,详细信息参见:http://site.icu-project.org/,其中ICU4C为C/C++支持库,ICU4J为Java支持库,简要介绍见:http://www.ibm.com/developerworks/cn/opensource/os-icu4c/,ftp下载站点为:http://download.icu-project.org/files/,针对MSVC10的32/64bit已编译包在可从http://download.icu-project.org/files/icu4c/51.1/下载.

ANGLE库可以从https://code.google.com/p/angleproject/获取,但是由于其在DirectX9上实现,必须要安装DirectX SDK.(https://www.microsoft.com/en-hk/download/details.aspx?id=6812).

其他工具下载链接:

Perl:http://www.activestate.com/activeperl/downloads

Python:http://www.python.org/download/

Rudy:http://rubyinstaller.org/

jom:https://qt-project.org/wiki/jom

2 Qt5.0模块分类

Qt5.0模块划分见https://qt-project.org/doc/qt-5.0/qtdoc/modules.html,可以根据所需模块选择性编译:

->基础模块

Qt Core Core non-graphical classes used by other modules.提供给其他模块使用的核心非图形类 对应于源代码目录Qtbase
Qt GUI Base classes for graphical user interface (GUI) components. Includes OpenGL.图形界面基础类,包含OpenGL  
Qt Multimedia Classes for audio, video, radio and camera functionality.音频、视频、无线电、相机功能类  
Qt Network Classes to make network programming easier and more portable.网络编程支持类 源代码目录qtmultimedia
Qt QML Classes for QML and JavaScript languages.QML及JavaScript支持类  
Qt Quick A declarative framework for building highly dynamic applications with custom user interfaces.使用自定义用户界面构建高动态应用程序的描述性框架  
Qt SQL Classes for database integration using SQL.基于SQL的数据库整合类  
Qt Test Classes for unit testing Qt applications and libraries.单元测试类  
Qt WebKit Classes for a WebKit2 based implementation and a new QML API. See also Qt WebKit Widgets in the add-on modules. 源代码目录qtwebkit
Qt WebKit Widgets WebKit1 and QWidget-based classes from Qt 4.  
Qt Widgets Classes to extend Qt GUI with C++ widgets.扩展Qt GUI的C++组件类  

->附加组件

 

Active Qt Classes for applications which use ActiveX and COM 源代码目录qtactiveqt
Qt Concurrent Classes for writing multi-threaded programs without using low-level threading primitives.  
Qt Graphical Effects Graphical effects for use with Qt Quick 2.  
Qt Image Formats Plugins for additional image formats: TIFF, MNG, TGA, WBMP.  
Qt OpenGL OpenGL support classes.

Note: Provided to ease porting from Qt 4.x. Please use the QOpenGL classes in QtGui for new code.

 
Qt Print Support Classes to make printing easier and more portable.  
Qt Declarative Qt Declarative is provided for Qt 4 compatibility. The documentation is available through the Qt 4.8 Qt Quickdocumentation. qtdeclarative
Qt Script Classes for making Qt applications scriptable. Provided for Qt 4.x compatibility. Please use the QJS* classes in the QtQmlmodule for new code.  
Qt Script Tools Additional components for applications that use Qt Script.  
Qt SVG Classes for displaying the contents of SVG files.  
Qt XML Patterns Support for XPath, XQuery, XSLT and XML schema validation. qtxmlpatterns

 

->工具

Qt Designer Classes for extending Qt Designer.
Qt Help Classes for online help.
Qt UI Tools Classes for UI tools.

3 配置选项

确保安装Perl之后,在源代码目录下运行

configure -help

可以得到Qt的配置选项.主要选项如下:

目录设置    
  -prefix <dir> 指定编译结果目录,如果不指定编译结果将会出现在Qtbase下
库编译    
  -debug 生成debug库
  -release 生成release库
  -debug-and-release 生成debug及release库
  -shared 创建并使用动态Qt库
  -static 创建并使用静态Qt库
模块编译    
  -make <part> 编译(libs,tools,examples...)
  -nomake <part> 不编译(libs,tools,examples...)
  -skip <module> 构建时排除该模块
  -no-widgets 禁止编译widgets模块
  -no-sql-<driver> 禁止编译指定SQL驱动
  -no-opengl 不支持opengl
  -opengl <api>

使能opengl指定API

desktop 桌面OpenGL

es1

es2

  -icu 使用ICU库
  -no-icu 不是用ICU
Windows支持    
  -no-vcproj 不生成vc++.vcproj文件
  -vcproj 只针对"win32-msvc.net",
  -no-openssl 不编译openssl
...    

 

4 如何选择模块及配置

 源代码目录为: 

 Volume in drive D has no label.
 Volume Serial Number is 3245-ACDE

 Directory of D:\Qt\src

05/20/2013  09:48 PM    <DIR>          .
05/20/2013  09:48 PM    <DIR>          ..
05/20/2013  07:43 PM    <DIR>          .obj
04/09/2013  03:11 AM    <DIR>          gnuwin32
05/20/2013  07:58 PM    <DIR>          qtactiveqt
05/20/2013  07:57 PM    <DIR>          qtbase
04/09/2013  03:11 AM    <DIR>          qtdeclarative
04/09/2013  03:10 AM    <DIR>          qtdoc
04/09/2013  03:11 AM    <DIR>          qtgraphicaleffects
04/09/2013  03:11 AM    <DIR>          qtimageformats
04/09/2013  03:11 AM    <DIR>          qtjsbackend
04/09/2013  03:11 AM    <DIR>          qtmultimedia
04/09/2013  03:11 AM    <DIR>          qtquick1
05/20/2013  07:59 PM    <DIR>          qtscript
04/09/2013  03:11 AM    <DIR>          qtsvg
05/20/2013  08:06 PM    <DIR>          qttools
04/09/2013  03:10 AM    <DIR>          qttranslations
04/09/2013  03:11 AM    <DIR>          qtwebkit
04/09/2013  03:12 AM    <DIR>          qtwebkit-examples-and-demos
04/09/2013  03:11 AM    <DIR>          qtxmlpatterns
               0 File(s)              0 bytes
              20 Dir(s)  146,437,746,688 bytes free

 同样,可以查看源代码目录下的qtsdk.pro文件

addModule(qtbase)
addModule(qtsvg, qtbase)
addModule(qtxmlpatterns, qtbase)
addModule(qtjsbackend, qtbase)
addModule(qtdeclarative, qtjsbackend, qtsvg qtxmlpatterns)
addModule(qtmultimedia, qtbase, qtdeclarative)
addModule(qtactiveqt, qtbase)
addModule(qtwebkit, qtdeclarative, , WebKit.pro)
addModule(qttools, qtbase, qtdeclarative qtactiveqt qtwebkit)
addModule(qtwebkit-examples-and-demos, qtwebkit qttools)
addModule(qtimageformats, qtbase)
addModule(qtgraphicaleffects, qtdeclarative)
addModule(qtscript, qtbase)
addModule(qtquick1, qtscript, qtsvg qtxmlpatterns qtwebkit qttools)
addModule(qttranslations, qttools)
addModule(qtdoc, qtdeclarative)

 在Qt5.0中可以选择编译的模块为:

模块名 所在目录 描述
base qtbase 包含了Qt的基础类库,该类库必须编译
svg qtsvg Classes for displaying the contents of SVG files.显示SVG文件内容的类库
xmlpatterns qtxmlpatterns Support for XPath, XQuery, XSLT and XML schema validation
jsbackend qtjsbackend 构建依赖于Python
declarative qtdeclarative Qt Declarative is provided for Qt 4 compatibility. The documentation is available through the Qt 4.8 Qt Quick documentation.
multimedia qtmultimedia Classes for audio, video, radio and camera functionality.
activeqt qtactiveqt Classes for applications which use ActiveX and COM
webkit qtwebkit Classes for a WebKit2 based implementation and a new QML API. See also Qt WebKit Widgets in the add-on modules.
imageformats qtimageformats Plugins for additional image formats: TIFF, MNG, TGA, WBMP.
graphicaleffects qtgraphicaleffects Graphical effects for use with Qt Quick 2.
script qtscript Classes for making Qt applications scriptable. Provided for Qt 4.x compatibility. Please use the QJS* classes in the QtQml module for new code.
quick1 qtquick1 A declarative framework for building highly dynamic applications with custom user interfaces.
translations qttranslations tr翻译功能
doc qtdoc  
webkit-examples-and-demos qtwebkit-examples-and-demos webkit的示例及演示
tools qttools
Qt Designer Classes for extending Qt Designer.
Qt Help Classes for online help.
Qt UI Tools Classes for UI tools.

 可以使用-skip modulename来跳过编译该模块.

  5 最小功能编译

 假设只是为了使用Qt的GUI库,也就是说,编译只依赖于base+tools模块,那么需要的工具为:

 ->Perl

 ->MSVC编译环境

 ->jom&wtee(wtee可以保持命令行输出并保存到文件,来给编译过程进行记录)

 可采用以下命令进行配置:

configure -prefix "D:\Qt\build" -release -opensource -nomake examples -no-opengl -no-openssl -no-openvg -no-angle -no-icu -no-vcproj -skip svg -skip xmlpatterns -skip jsbackend -skip declarative -skip multimedia -skip webkit -skip webkit-examples-and-demos -skip imageformats -skip quick1 -skip translations -skip doc -skip graphicaleffects  -mp -D _CRT_SECURE_NO_WARNINGS

 将编译结果存储在"D:\Qt\build"目录,使用release模式编译,不编译exampes.不是用opengl、openssl、openvg,不是用angle及icu,-no-vcproj来禁止产生vc工程文件(如果配置为参数vc工程文件,在实际配置中会报出很多找不到vcproj文件的警告),除了base和tools模块,其他全部跳过.使用-mp标志使能多处理器编译支持,使用"-D _CRT_SECURE_NO_WARNINGS"宏传递选项来禁止关于string操作的windows 不安全警报(报出的很多警告都是该原因).

 配置无误完成后.在qtbase\bin目录下会有qmake、moc等编译工具,用来编译其他Qt模块.然后使用如下命令进行编译:

jom -j<处理器数目> install 

在配置及编译时,假设将配置命令保存为cfg.bat,编译命令保存为install.bat,使用wtee记录中间的过程方式如下:

call cfg.bat |wtee cfg.log
call install.bat |wtee install.log

在I5-3320M 4核处理器,4G内存,64位Windows7操作系统上使用该配置编译耗时17分钟完成.在编译完成之后,build\bin目录下会有uitools编译完成,可以打开designer.exe来检查编译结果是否正常.这样编译出来的lib即可作为发布使用.

 注:Perl安装后自动设置环境变量,如果不确定,可以在命令行嵌入perl查看是否正常.

    :配置时最好从MSVC的命令行启动,configure会根据你启动的命令行判断你所使用的编译器版本及位数.

    :使用wtee及本文描述的.bat文件时,可以置于源代码根目录下

    :另外,如果使用-prefix指定编译结果路径,务必在编译时使用install目标,使用默认目标将会在qtbase\bin目录下创建build目录保存编译结果.

 6 配置引导

 ->我只是使用QtWidget来编写GUI程序,不需要Webkit和Quick

 如果是这样,安装就不会依赖与ANGLE和ICU库,同样Rudy及Python也不需要,也无需安装Direct SDK.你需要跳过webkit以及webkit-examples-and-demos,同时跳过jsbackend及quick1.并且采用-opengl desktop,以及 -no-angle标志.

 ->如何编译32bit和64bit的Qt

 对于MSVC来讲,编译两种Qt的不同支持仅仅在于启动的编译环境不同,其他配置均相同,当然你可能需要修改一下编译输出的路径(清除上次编译配置的命令为nmake confclean).

 ->关于debug与release

 配置时可以使用-release,-debug,-debug-and-release来使能相应的配置.

 ->静态库与动态库

 配置时,使用-shared得到动态库,-static得到静态库.

 ->多版本编译及共存的建议

 可以使用QtCreator来选择工具链,这样,可以在build目录下建立x86及x64两个目录,并在编译时分别指定对应目录,然后手动配置编译工具链.

 7 常规应用编译版本(不使用webkit及quick1)

 配置命令如下:

configure -prefix "D:\Qt\build\x64" -debug-and-release -opensource -opengl desktop -no-openssl -no-openvg -no-icu -no-vcproj -nomake examples -skip jsbackend -skip webkit -skip webkit-examples-and-demos -skip quick1 -skip declarative -skip multimedia -skip doc -skip graphicaleffects -mp -D _CRT_SECURE_NO_WARNINGS

注:关于模块间的依赖关系可见qtsdk.pro下面的addmodule.

 该配置在I5-3320M 4核处理器,4G内存,64位Windows7操作系统上使用该配置编译耗时30分钟完成.

 

posted @ 2013-05-20 23:43  liff.engineer  阅读(4414)  评论(1编辑  收藏  举报