VS2015静态编译Qt5

最近领导给一个任务:编译一个Qt环境,从而让Qt程序“摆脱”显式VS运行时库。因为Qt Creator 默认的都是动态编译,所以为了完成任务,必须要自己手动静态编译Qt源码。因为我们的目标是使用MSVC并且要兼容Windows XP 系统,所以即使网上的教程很多,但是符合我们需求的教程也比较少,而且由于自己很小白,一些大佬的“高大上”的教程着实有点吃不消,为此花了N天,不断的实验、踩坑、实验、踩坑…终于“修成正果”,特在此留迹,希望能够给需要的伙伴们一点帮助,也给自己留一笔记。

实验环境

  • 操作系统:Windows 10
  • Visual Studio:2015
  • Qt Creator:v4.0.3
  • Qt 源码版本:v5.6.3
  • Python:v3.6.4
  • Perl:v5.24.3
  • jom:v1.1.3

环境配置

  1. Qt 源码下载

    安装Qt时默认的是使用动态库, Qt 官网 也没有提供编译好的静态库供人们下载。不过不乏一些网络大佬已经给我们静态编译好了部分版本的Qt,如 https://www.npcglib.org/~stathis/blog/precompiled-qt4-qt5/ 。但是我下载了其中几个的版本,经过试验发现并不能满足我的需求,因此,只好自行下载相应的Qt源码,自己动手生成静态库。

    这里我选择的是 Qt 5.6.3,源码网址:http://download.qt.io/official_releases/qt/5.6/5.6.3/ ,(需要其他版本源码的伙伴们可以在 http://download.qt.io/official_releases/qt 里面下载),因为我之前已经有了 Qt Creator 编译器,所以 我只选择了下载 Qt 源码(如果没有编译环境的伙伴可以选择下载 .exe 程序, 在安装的时候一定要勾选 Source Components 选项)。

  2. Python 环境配置

    因为人工智能的又一次兴起,Python 再次成为热点,因此网络中有很多优秀的Python环境变量配置教程,没有安装Python的伙伴可以自行在网上寻找相关教程,如果不想再麻烦,在此我提供了一个自认为还不错的网址:https://www.cnblogs.com/huangbiquan/p/7784533.html ,这是以 python 2.7.8(64位)为例的,python 3 的过程类似。

  3. Perl 环境配置

    其实我觉得 Perl 在我的编译过程中并没有什么作用,但是网络中的大多数都要求配置 Perl 环境,所以我也跟着配了一下。(反正也不是特麻烦,哈哈~)

    安装包:Windows Installer (MSI)
    官网地址:ActivePerl Downloads - Perl Binaries for Windows, Linux and Mac

    我选择的是 ActivePerl-5.24.3.2404-MSWin32-x64-404865.exe。友情提示:在安装过程记得勾选 添加到 Path中,否则还请自行配置其环境变量。

  4. jom 下载

    jom是nmake的一个克隆,支持并行执行多个独立命令。在编译阶段为了使用多核处理器从而提高编译速度,可以采用jom 方式,因为编译时间比较长,期间如果还想使用电脑,建议使用单线程的 nmake。

    jom 安装比较简单,官方介绍:https://wiki.qt.io/Jom ,其中有下载网址,本人选择的是最新版的 jom_1_1_3.zip ,直接解压即可使用。


Qt 源码编译

  1. 修改编译文件

    将下载的Qt源码进行解压后,寻找 ./qt-everywhere-opensource-src-5.6.3/qtbase/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
    
  2. 打开VS2015 开发人员命令提示

    打开开始菜单,找到 Visual Studio 2015 文件夹,找到 “Developer Command Prompt for VS2015”,即:VS2015 开发人员命令提示

VS2015开发人员命令提示

     打开后进入到Qt源码文件夹下,如我的源码在 E:\Qt\Src\qt-everywhere-opensource-src-5.6.3 下

Qt源码目录

下面重点来了!!!

  1. 使用configure 命令
    输入:

configure -confirm-license -opensource -platform win32-msvc2015 -debug-and-release -static -mp -target XP -prefix “E:\Qt\5.6.3-static-vs2015” -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples

      configure 参数详解:
      在 configure.exe所在的文件目录下,使用 " configure -h" 命令可以查看所有参数,这里只介绍用到的比较多的几个参数:

      -confirm-license -opensource:		自动选择开源协议
      -platform:		选择编译平台 
      -debug-and-release:		debug和release编译 (默认只编译 release版本)
      -static: 		编译静态库
      -mp:		多线程编译 (需配合 jom 使用)
      -target:		选择目标平台
      -prefix:		指定编译后生成的目录 (其中的引号必须是英文哦)
      -qt-sqlite -qt-pcre -qt-zlib -qt-libpng...:		这些的意思是使用Qt源码中自带的这些第三方库 
      -nomake examples -nomake tests: 		不编译example和tests

      该过程大概需要几分钟的样子,如果过程中没报错,则配置完成,可以根据系统提示,继续执行 nmake,如果想用多线程,可以选择 jom

  1. 使用 nmake 编译源码

    直接在控制命令行窗口输入:nmake,该过程大概需要3~4小时,根据电脑配置不同,时间略有出入。如果选择输入:jom,那么该过程大概需要 0.5~1小时(因为是多线程编译,所以期间电脑会很卡,如编译期间仍需用电脑,建议使用 nmake)。

  2. 使用 nmake install 安装源码

    步骤4 执行完后,直接输入:nmake install 或者 jom install。前者对应 nmake,后者对应*jom*。此过程的执行时间也比较长,前者大概0.5~1小时,后者大概1小时(很无聊,但是请耐心等待)

以上步骤执行完成后就可以在你的目标生成目录中找到你梦寐以求的静态版Qt了。下面要开始在Qt Creator 或者 vs2015 部署了~~~

静态Qt库部署

  • 在 Qt Creator 中使用 Qt 静态库
    在 Qt Creator 中部署比较简单,点击菜单“工具”-“选项”,再选择“构建和运行”-“Qt Versions”-“添加”,将刚才静态库目录下的 .\bin\qamke.exe 加进来,点击 “Apply(应用)”。
Qt Versions

      在 选择 “构建套件(Kit)”–“添加”,“Qt 版本”选择我们上面设置好的静态版Qt。然后给该套件起个名称,以增加可读性。最后点击 “OK”。配置完成。

构建套件

注: 在 Qt Creator 中使用静态Qt时,需要在项目文件 .pro 中添加 CONFIG += static

  • 在vs2015中配置Qt 静态库

在vs中配置过程比较复杂,首先需要更换静态 Qt 库,然后进行项目配置,最后在 main 函数中导入平台扩展静态库的头文件。下面一一介绍:

  1. 安装 Qt Visual Studio Tools 或 QtPackage 工具
    本文以 Qt VS Tools 为例。在 “工具”-“扩展与更新”中在线搜索 “Qt Visual Studio Tools”,下载后,关闭所有 Visual Studio 窗口,该工具会自动安装。安装完成如下:(如有该工具或者QtPackage,本步骤直接跳过即可)
构建套件
  1. 更换静态 Qt 库

    在 Qt VS Tools 中依次打开 “Qt Options”-“Qt Versions”,选择 “添加”,然后在 path 选项中打开 编译好的Qt静态库(目录打开到 bin 目录的父目录即可,例:E:\Qt\5.6.3-static-vs2015),然后给其命名一个易识别的名称(也可以使用默认名),注意 在下面的 默认Qt/Win 版本中选中该静态版本。点击 “OK” 即可。

  2. 项目配置

    上面扩展给我们提供了使用动态Qt库模板,但是要使用静态库,还需一下配置:
    首先,在项目上右键,选择 “属性”-“链接器”-“常规”-“附加库目录”-添加 “$(QTDIR)\plugins\platforms” 这个目录,即平台扩展静态库。

附加库目录

      然后在“链接器”-“输入”-“附加依赖项”,新增下面这些库:
      release 版:

		Qt5PlatformSupport.lib
		qminimal.lib
		qoffscreen.lib
		qwindows.lib
		qtfreetype.lib
		qtharfbuzzng.lib
		qtpcre.lib
		opengl32.lib
		ws2_32.lib

      debug 版:

		Qt5PlatformSupportd.lib
		qminimald.lib
		qoffscreend.lib
		qwindowsd.lib
		qtfreetyped.lib
		qtharfbuzzngd.lib
		qtpcred.lib
		imm32.lib
		winmm.lib
		opengl32.lib
		ws2_32.lib
附加依赖项

      在 “C/C++” -“常规”-“附加包含目录”,加入下面4个路径:

		$(QTDIR)\include\QtCore
		$(QTDIR)\include\QtGui
		$(QTDIR)\include\QtWidgets
		$(QTDIR)\include\QtPlatformSupport
附加包含目录

      修改程序的运行时库,release 版选择 /MT,debug 版 选择 /MTD。如下图:

运行时库

注: 以上配置中的所有 $(QTDIR) 变量代表的是 静态编译好的Qt源码地址。如需修改可以在项目目录下查找 .pro.user 文件,然后修改文件里面的 $(QTDIR)变量定义。

  1. 导入平台扩展静态库的头文件

    在项目中找到main.cpp这个文件,在开头插入下面的代码,即可导入平台扩展静态库的头文件

     #include <QtCore\QtPlugin>
     Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
    

以上步骤完成后,静态Qt库在vs中的配置就宣告结束了,伙伴们就可以愉快的使用静态库编写程序,而不需要一大堆的dll了。

参考链接:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值