官方参考文档:https://doc.qt.io/qt-5/build-sources.html

CSDN博客:https://blog.csdn.net/GG_SiMiDa/article/details/78517246

博客园博客:https://www.cnblogs.com/BuildingIT/archive/2013/03/22/2976480.html

安装QT有两种方式:

  1. 通过QT安装包(Windows下exe文件)
  2. 通过QT源码

下文主要描述QT源码的编译方法,QT版本为5.12

下载源码:http://download.qt.io/archive/qt/5.12/5.12.0/single/

PS:我下载时遇到的一个插曲,直接在浏览器中点击红线处下载的zip文件解压不了,提示损坏了,最后右键菜单"复制链接地址"使用迅雷精简版下载后可以正常解压使用!

Windows平台相关支持需要:

我解压到F:\qt-everywhere-src-5.12.0,可以看到里面有configure文件,在此处使用 configure -h 可以看到可配置的参数,太多了这里只列举几个比较常设置的:

-release             Compile and link Qt with debugging turned off.

-debug              Compile and link Qt with debugging turned on.

-debug-and-release           Build two versions of Qt.

-shared                          Build shared Qt libraries [yes] (no for UIKit)

-static                         Build static Qt libraries [no] (yes for UIKit)

-nomake tests            Disable building of tests to speed up compilation

-nomake examples         Disable building of examples to speed up compilation

-confirm-license         Automatically acknowledge the LGPL 2.1 license.

-no-opengl                     Disable OpenGL support

-opengl <api>                     Enable OpenGL support.Support APIs:

      es2 <default on Windows>

      desktop <default on Unix>

      dynamic <Windows only>

-opengles3                   Enable OpenGL ES3.x support instead of ES2.x [auto]

Windows编译需要准备如下工具:

Python 2.7及以上版本(如果编译WebKit >=2.6.x):下载地址https://www.python.org/downloads/

Perl 5.12 以上版本(必须安装且版本>=5.14):下载地址https://www.activestate.com/activeperl/downloads

支持C++11的编译器,MSVC2012以上版本或者MinGW4.9以上版本

Qt编译有两种控制方式:
1、取决于是否使用什么层次的OpenGL API:这里有三个选择:-opengl desktop、-opengl es2和-no-opengl,将来还会增加-opengl es3;
2、如果选用OpenGL ES 2的API渲染的话,Qt也给出了三种方案:-no-angle,直接使用OpenGL的API进行渲染,需要显卡厂商支持OpenGL ES 2.0,对应libGLESv2.dll、libEGL.dll;-angle,如果客户机器不支持OpenGL ES 2.0渲染,但是支持OpenGL 1.5,或者支持DirectX 9.0,那么可以使用-angle这个解决方案转换为DirectX的渲染API进行渲染,需要D3DCompiler_4(x).dll以及libGLESv2.dll、libEGL.dll;-angle-d3d11,如果客户机器支持DirectX 11(需要Windows 7以上,通常情况也支持OpenGL ES 2.0),想用最新的DirectX API进行渲染,那么可以使用这个方法进行编译。

以编译静态库为例

Windows

msvc版

configure -confirm-license -opensource -platform win32-msvc -debug-and-release -static -static-runtime -force-debug-info -opengl dynamic -prefix "./build" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -nomake tests -no-compile-examples -nomake examples

mingw版

configure -confirm-license -opensource -platform win32-g++ -debug-and-release -static -static-runtime -force-debug-info -opengl dynamic -prefix "./build" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -nomake tests -no-compile-examples -nomake examples

Linux

./configure -confirm-license -opensource -debug-and-release -static -static-runtime -force-debug-info -opengl dynamic

[我的配置-mingw版]

configure -prefix "./build" -release -opensource –static -static-runtime  -force-debug-info -opengl dynamic -opengl desktop -platform win32-g++ -c++std c++11 -skip qtwebengine -nomake examples -nomake tests -mp -confirm-license

配置完成后会生成Makefile文件

[nmake/mingw32-make/make]

使用对应平台下的编译工具(nmake是MSVC的make,mingw32-make是g++的Windows版本的make,make是Linux中的make),如果没有请安装好,此过程比较长,大概一个小时以上,漫长的等待中……

[nmake/mingw32-make/make] install

安装成功后,应该可以在./build目录下看到如下文件夹:

如果是静态编译,在lib中可以看到.a库,动态的则是.dll或者.so库

在bin目录下,qt助手、qt设计师、qt翻译家等也都编译出来了~

但是没有qt creater,这需要单独下载qt creater的源码单独编译!

QT静态库的使用:

打开QT Creater,运行qt自带的例子boxes,使用默认的MinGW配置编译会编译不过,提示错误: This example requires Qt to be configured with -opengl desktop

原因是默认的Windows版本的QT使用的编译选项是-opengl dynamic,而boxes例子中使用了原生的opengl绘图,需要-opengl desktop才能使用。我们上述编译的qt静态库特意配置了-opengl desktop选项。

"工具"->"选项"->"Kits":

添加Qt Versions,将我们上述编译的qt静态库build目录中的qmake添加:

配置构建套件(Kit),手动设置"桌面"配置如下:

打开boxes工程,配置"桌面"编译选项,执行build操作

等待大约2分钟左右,boxes例程终于可以成功编译了~

运行吧!

Win7下静态编译QT5.12源码的更多相关文章

  1. msvc2013编译qt5.6源码

    1.回顾 说起到qt的编译,真是领人痛心啊,不仅编译选项繁多,而且编译时间比较久,总是能使想编译qt源码的人望而却步,呵呵...我就是其中一个,不知道从什么时候开始就想着把qt的源码编译一下,也尝试过 ...

  2. MAC 下编译 ANDROID P 源码 提示 internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12" "10.13"]

    MAC 下编译 ANDROID P 源码出现下面的问题: ninja: no work to do. [21/21] out/soong/.bootstrap/bin/soong_build out/ ...

  3. windows下使用mingw和msvc静态编译Qt5.15.xx

    windows下使用mingw和msvc静态编译Qt5.15.xx 下载并安装相关依赖软件 Python version 2.7 https://www.python.org/downloads/ ( ...

  4. Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程

    Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程   在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容 ...

  5. win7 安装用mingw编译的Qt源码并连接postgresql

    下载Qt 1.下载qt-creator-windows-opensource-2.8.0,下载路径:http://download.qt.io/official_releases/qtcreator/ ...

  6. Win7下VS2008编译QtiPlot

    Win7下VS2008编译QtiPlot By wangsh 2011-11-25 QtiPlot 是一款开源免费的科学绘图软件,可运行在多个平台(windows.Linux等)中,从功能上讲,Qti ...

  7. Ubuntu 下载 & 编译 Android5.1 源码

    ustc & tsinghua android srchttps://lug.ustc.edu.cn/wiki/mirrors/help/aosphttps://mirrors.tuna.ts ...

  8. 编译android5.0源码的

    java环境 Android 5.1 用到的jdk不再是Oracle 的 jdk ,而是开源的 openjdk,在ubuntu安装好后,使用如下命令安装jdk: $sudo apt-get insta ...

  9. 【转】编译Android系统源码和内核源码

    原文网址:http://blog.csdn.net/jiangwei0910410003/article/details/37988637 好长时间没有写blog了,之所以没有写,主要还是工作上的事, ...

随机推荐

  1. PHP输入流php://input与$_POST、$_GET

    Content-Type的取值会影响php的输入流 学习笔记 1,Content-Type仅在取值为application/x-www-data-urlencoded和multipart/form-d ...

  2. phpize的作用(资料整理)

    phpize的作用可以这样理解:侦测环境(phpize工具是在php安装目录下,基于这点phpize对应了当时的php环境,所以是要根据该php的配置情况生成对应的configure文件),建立一个c ...

  3. 【Unity】制作简易定时器(Timer)

    最近开始学习Unity,也想开始学习写一些简单的博客. 在网上学习了一些关于定时器的写法,在此简单总结一下,方便自己以后用到时查阅. 需求:制作定时器,运行3秒后执行第一次,之后每隔3秒执行一次操作. ...

  4. Java异常处理之InvocationTargetException(反射异常)

     Java异常处理之InvocationTargetException(反射异常) InvocationTargetException异常由Method.invoke(obj, args...)方法抛 ...

  5. oozie java api提交作业

    今晚试验用java的api来提交代码,由于代码是在我机器上写的,然后提交到我的虚拟机集群当中去,所以中间产生了一个错误..要想在任意一台机器上向oozie提交作业的话,需要对hadoop的core-s ...

  6. FatJar in 创新实训 自然语言交流系统

    Fat Jar Eclipse Plug-In是一个可以将Eclipse JavaProject的所有资源打包进一个可执行jar文件的小工具,可以方便的完成各种打包任务,我们经常会来打jar包,但是e ...

  7. php时间段判断

    <?php function times(){ ini_set('date.timezone','Asia/Shanghai'); $time = date("Y-m-d H:i&qu ...

  8. c 预处理的宏定义

    概念 以“#”号开头的都是预处理命令 例如 #include <stdio.h>宏定义 宏定义无参数的宏名后不带参数# 表示这是一条预处理命令, define 为宏定义命令.“标识符”为所 ...

  9. (笔记)Linux 如何查看线程数最佳解决方案

    背景:很多学linux的人都会使用ps查看进程状态,却一直不清楚如何查看线程的状态. 方法:可使用ps -a 或 ps -T命令查看 一.使用ps -a命令查看 比如拿我的测试进程./lc300-le ...

  10. C语言中的循环语句练习

    注:练习题目均出自<明解C语言 入门篇> 一.do语句 1,求多个整数的和及平均值 #include<stdio.h> int main(void) { ; //和 ; //整 ...