qt5.8_for_vs2015静态编译

  1. 云栖社区>
  2. 博客>
  3. 正文

qt5.8_for_vs2015静态编译

py_tty_0529 2018-07-25 11:10:39 浏览1437
展开阅读全文

1)文件下载
    [1]qt5.8:本文实例版本->qt-opensource-windows-x86-msvc2015_64-5.8.0.exe
    [2]vs2015:本文实例版本->vs2015.ent_chs.iso
    [3]第三方支持软件:
    本文实例版本->strawberry-perl-5.22.3.1-64bit.msi,rubyinstaller-2.2.3-x64.exe,python-3.3.2.amd64.msi
     * Perl version 5.12 or later   [http://www.activestate.com/activeperl/]
     * Python version 2.7 or later  [http://www.activestate.com/activepython/]
     * Ruby version 1.9.3 or later  [http://rubyinstaller.org/]
    [4]可选qt-vs-addin
2)安装
   [1]安装vs2015,必选vc++和更新选项
   [2]安装strawberry-perl,ruby,python,勾选加入环境变量path选项,如果没有,需要自行加入
   [3]安装qt5.8,可选qtcreater选项,放弃strawberry-perl选项
3)配置
    [1]本文实例qt安装路径C:\software\Qt\Qt5.8.0,进入\5.8\msvc2015_64\mkspecs\common目录,打开msvc-desktop.conf文件,修改
        QMAKE_CFLAGS_RELEASE    = -O2 -MD
        QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
        QMAKE_CFLAGS_DEBUG      = -Zi -MDd
        改为:
        QMAKE_CFLAGS_RELEASE    = -O2 -MT
        QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
        QMAKE_CFLAGS_DEBUG      = -Zi –MTd
        
        修改:
        在QMAKE_LEXFLAGS后面加上 –static
        补充:如果安装时只选择安装源码,那么需要到C:\software\Qt\Qt5.8.0\5.8\Src\qtbase\mkspecs\common下去修改相应的文件
    [2]选择合适的vs2015命令工具版本打开,执行下列命令(示例)
        $ set QTDIR=C:\software\Qt\Qt5.8.0\5.8\msvc2015_64
        $ set PATH=%PATH%;%QTDIR%\bin
        $ set QMAKESPEC=win32-msvc2015

        补充:如果安装时只选择安装源码, set QTDIR=C:\software\Qt\Qt5.8.0\5.8\Src\qtbase
    [3]工程编译,执行下列配置命令(注意替换输出目录,命令不要换行),或将该命令写入bat文件调用执行,涉及参数看附录
        configure -confirm-license -opensource -debug-and-release -static -force-debug-info -prefix "C:\software\Qt\Qt5.8\5.8\msvc2015_64_static" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -nomake tests -nomake examples
    [4]编译,中途编译可能会有异常,请酌情解决,本实例中遇到一个qdebug内容含有特殊字符,需要设置文件格式,我是直接注释解决
        $ cd src
        $ nmake
    [5]编译完成,安装静态版本
        $ nmake install
补充,如果安装时只选择安装源码编译出来的静态版本:

1)将C:\software\Qt\Qt5.8.0\5.8\msvc2015_64_static\bin加入环境变量path中

2)如果需要命令型编译,需要先启动vs的命令工具(注意与编译qt的一致),若已设置了qt路径,可就可直接当作Qt 5.8 for Desktop使用,否则需要预先设置set path=%path%;C:\software\Qt\Qt5.8.0\5.8\msvc2015_64_static\bin再试用


附配置参数描述:
-release
这个参数显而易见,就是编译Qt以发布版的模式进行,一般来说,最后系统完成后,库就应该是发布版。
-debug
与上面对应,自然是调试版了,如果开发的话,可以选择它吧。
-debug-and-release
上面那两个的集合。

-developer-build
开发者也可以用这个的,选了这个后,可以进行自动测试。

-opensource
-commercial
这两个参数是指是编译是商业版本的,还是开源版本呢,视个人情况而定。

-shared
-static
这两个参数是指Qt的lib以动态还是静态编译生成,这自然也是视个人需要的。

-no-fast
-fast
这两个就很有关系,如果对自己的电脑性能很有信心,那就选第一个,那所有的工程文件都会生成到makefiles中,那编译的时间较长了。
如果选第二个,那就加入子目录和库到makefiles,这样就能加快编译的速度。

-no-largefile
-largefile
支不支持大文件,一般来说,嵌入式里是不会有从超过4G的大文件的,那就选第一个吧。

-no-exceptions
-exceptions
异常情况,选则编译器支持抛出异常,否则不支持。

-no-accessibility
-accessibility
可访问性的支持。

-no-stl
-stl
是否加入stl的支持。

no-sql-<driver>
-qt-sql-<driver>
-plugin-sql-<driver>

qt也自带了大多数数据库驱动,可以完美地支持数据库的使用。对于数据库的使用,我们可以直接qt驱动编译进去,或者以插件的形式编译进去。
一般来说,最简单地就是直接编译进去,但使用插件形式的可以更加灵活,针对不同的需求将驱动插件添加。其中,<>代表的是驱动名,
如果想直接添加sqlite的支持话,形式如下:-qt-sql-sqlite。其他名称可以自己查看参数里,有详细地介绍。

-system-sqlite
这个参数意思是使用操作系统上的sqlite数据库,如果是不太会移植的,可以考虑直接使用qt自带的驱动。

no-xmlpatterns
-xmlpatterns
选择对xml的支持,如果对网络无需求的话,就不用加了。

-no-phonon
-phonon
phonon是qt中处理多媒体的模块,根据需要选择的。

-no-phonon-backend
-phonon-backend
与上面类似,只不过这两是以插件的形式加入支持。

-no-svg
-svg
是否加入svg的支持,svg即可缩放矢量图形。

-no-scripttools
-scripttools
是否加入脚本工具的支持,这对php等脚本工程师来说是个很棒的参数。

-platform target
目标平台指定,很关键的参数,但如果你编译工具已经明确了平台,可以不设置。

-no-mmx
-no-3dnow
-no-sse
-no-sse2
这四个参数是针对CPU的指令集。

-qtnamespace
把qt的库封装到命名空间。

-qtlibinfix
将所有的qt的.so库重命名。

-no-sql-<driver>
-qt-sql-<driver>
-plugin-sql-<driver>
-system-sqlite
这是数据库驱动及插件相关就是说如果是-no-XX-,就说明编译时不选择这个参数,如过是-qt-XX-,说明我们可以编译直接选用qt自带的驱动,
如果是 -plugin-XX-,就是将驱动以插件形式编译,而-system-XXX,当然是使用操作系统提供的驱动,不过那就需要您自己移植了,
而且有时还要用第三方的API。

接下来,我们接着研究配置参数。

-qt-zlib
-system-zlib
选择qt带的zlib库还是系统的zlib。zlib库是用于文件和资料压缩的库,实际开发中,
特别是对于多媒体图像图形的工程师来说,就肯定用到,因为图形图像的压缩都要使用或涉及到这个库。

-no-gif
-qt-gif
这是选择gif的支持,如果选择qt支持的话,那在用qt开发的项目中,就能显示gif图,gif也是比较普遍的图片格式了,英文全称是Graphics Interchange Format。

-no-libtiff
-qt-libtiff
-system-libtiff
tiff是一种非常复杂的光栅图像格式,并且有直接现成的C语言实现库,因此选择参数时就有了qt和system,一般来说,科学相关的开发里可能会用到。

-no-libpng
-qt-libpng
-system-libpng
png的相关参数,一种非失真性压缩位图图形文件格式,其实就是为了替代gif搞出来的,也是随实际需要来选择,当然,也有C语言实现的库。

-no-libmng
-qt-libmng
-system-libmng
MNG是多帧PNG动画格式。

-no-libjpeg
-qt-libjpeg
-system-libjpeg
jpeg图片格式。

-no-openssl
-openssl
-openssl-linked
SSL,Security Socket Layer,是一个安全传输协议,在Internet网上进行数据保护和身份确认,
而OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,在qt中,我们可以选择直接支持,
或者OpenSSL链接支持,这个参数也是为有需要者提供的。

以上是第三方库的参数选择,紧接着就是qt附加参数,在附加参数里,我们可以指定编译的部分及加入参数来获取信息。

-make
-nomake
一句话,说明,就说我可以这两个参数选择哪些我要编译,哪些我不需要,在 libs tools examples demos docs translations这些里你可以选择,
比如examples,并不重要,可以放在-nomake后,这样编译过程中就不会编译这部分了。通过适当的选择,我们可以大大加快编译的速度,
这对配置较差的机子来说有着积极意义。

-R <string>
-l <string>
这两个参数是为编译时增加一个库的运行路径及头文件的路径,比如使用tslib作为开发触摸驱动时,
我们就应使用这两个参数来指定tslib的库路径和头文件路径。

-no-rpath
-rpath
这个参数比较难于理解,简单地说,就是告诉动态加载器,到-rpath指定的目录中寻找编译时须要的动态链接库,
语法就与上面的参数结合,比如 -rpath -R/home/xxxx。

-continue
这个参数的作用就是当出现错误时依然进行配置编译。

-verbose, -v
这个参数就是显示配置的每一步的具体信息。

-no-optimized-qmake
-optimized-qmake
是否编译生成优化过的qmake,没啥大用,也属于可有可无的参数。

-no-nis
-nis
是否编译NIS支持,NIS(网络信息服务)是一个提供目录服务的RPC(远程过程调用)应用服务,当然没网络需要的可以再次华丽地无视。

-no-cups
-cups
是否编译CUPS支持,CUPS给Unix/Linux用户提供了一种可靠有效的方法来管理打印。
它支持IPP,并提供了LPD,SMB(服务消息块,如配置为微软WINDOWS的打印机)、JetDirect等接口。
CUPS还可以浏览网络打印机。它的开发提供者是大名鼎鼎的“水果生产商”----苹果公司。

-no-iconv
-iconv
选择是否编译iconv支持,iconv是一个计算机程序以及一套应用程序编程接口的名称。
它的作用是在多种国际编码格式之间进行文本内码的转换。这对跨语言Qt开发人员来说是很有用的,当然,考虑到中文的编码,选择加入支持。

-no-pch
-pch
是否支持预编译过的头文件。预编译头就是把一个工程中的一部分代码,预先编译好放在一个文件里(通常以.pch为扩展名),
这个文件就称为预编译头文件。这些预先编译好的代码在工程开发的过程中不会被经常改变。如果这些代码被修改,
则需要重新编译生成预编译头文件。

no-dbus
-dbus
-dbus-linked
是否编译编译QtDBus模块。dbus是freedesktop下开源的Linux IPC通信机制,本身Linux 的IPC通信机制包括,
管道(fifo),共享内存,信号量,消息队列,Socket等。在Qt中DBUS是有单独的模块的,可见其重要性。
 

-reduce-relocations
对于额外的库链接器优化,可以减少编译中的再定位。

no-separate-debug-info
-separate-debug-info
是否存储debug信息在.debug,一般为了查错,还是选择存储吧。

-xplatform target
相当浅显的参数,即交叉编译的目标平台,一般来说根据你所要移植的目标板来确定。

-no-feature-<feature>
-feature-<feature>
选取qte的feature编译,对于这个,我理解为特性,特性的描述你可以参考src/corelib/global/qfeatures.txt,
在这里面对于每个特性都有比较充分的讲解。对于特性地选择,也是要根据开发需求进行,如果裁剪适当,能大大为qte库瘦身。

-embedded <arch>
嵌入式平台架构选择,可以选择arm,mips,x86及generic,视你的目标平台决定吧。

-armfpa
-no-armfpa
这个参数也只是针对ARM平台的,是否加入对于基于ARM的浮点数格式的支持,通常,这个参数在编译时会自动选择。

-little-endian
-big-endian
目标平台的大端和小端选择,这应该是常识了,如果这不知道,就不要来混嵌入式了

-host-little-endian
-host-big-endia
主机平台的大端和小端选择,不选择也会在配置时自动选择。

-no-freetype
-qt-freetype
-system-freetype
选择freetype,FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,
在嵌入式开发中,有套可使用的字体对于中文开发至关重要,本人一般使用文泉驿字体。

-qconfig local
使用本地的qconfig配置文件来替代全部参数配置,有需要的可以去研究下,可以裁剪控件级别的参数。

-depths <list>
显示的像素位深,也是根据需要来进行吧。

-qt-decoration-<style>
-plugin-decoration-<style>
-no-decoration-<style>
这个是选择qt的样式风格,对于需要美化界面的项目来说,可以好好选择下。

-no-opengl
-opengl <api>
是否加入opengl的支持,OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。

-qt-gfx-<driver>
-plugin-gfx-<driver>
-no-gfx-<driver>
这个是相当重要的一个参数,选择QtGui的图形显示驱动,比如我们在pc上使用qvfb模拟时,就应该加入对qfvb的支持。
我们可以在 linuxfb,transformed,qvfb,vnc,multiscreen这几个中选择。在平常的开发板上,选择linuxfb即可。

-qt-kbd-<driver>
-plugin-kbd-<driver>
-no-kbd-<driver>
选择键盘的驱动支持,可以支持usb键盘,串口键盘等等,也是在tty,usb ,sl5000, yopy, vr41xx ,qvfb中选择。

qt-mouse-<driver>
-plugin-mouse-<driver>
-no-mouse-<driver>
鼠标的驱动支持,一般都会选择tslib,可以完美地支持触摸屏,在pc,bus,linuxtp,yopy,vr41xx,tslib,qvfb中选择吧。

-iwmmxt
加入iWMMXt指令的编译,也只是部分XScale架构才具有。

-no-glib
-glib
是否加入glib库的支持,glib库对应即gtk库,就也是说加入后可以使用gtk

网友评论

登录后评论
0/500
评论
py_tty_0529
+ 关注