资料收集
转发记录来源: https://blog.csdn.net/bjrxyz/article/details/54017049
最近要打包qt的库,所以需要编译qt源码。在qt的编译中遇到了不少的问题,都是在其他开源项目的编译中没有遇到的。而且qt源码自身的编译文档写的也比较烂,讲的不清不楚。废了不少功夫。
由于只需要qt的基本功能的库,所以并没有编译qt的全部组件,只编译了一部分。
本文的编译都是在windows上使用vs2013进行的编译。
准备工作
首先下载qt源码,我下的是qt-everywhere-opensource-src-5.7.0的版本。
然后准备环境,注意编译qt需要安装perl和python3,下载安装包安装安装即可。
然后进入VS2013 x86 本机工具命令提示命令行,一般在开始菜单里。之后的操作都要在这个命令行里进行。
接下来和linux上的编译过程有点像,先configure再make。
配置
进入源码根目录,确认里面有configure.bat配置脚本
运行这个脚本就可以开始配置,生成编译脚本。
注意配置脚本有些选项开关,可以configure.bat -help查看,我使用的选项是
.\configure.bat -mp -platform win32-msvc2013 -confirm-license -opensource -prefix %cd%\qtbase -debug-and-release -force-debug-info -nomake tests -nomake examples -skip qtx11extras -skip qtmacextras -skip qtconnectivity -skip qtandroidextras
- mp 选项的意思是多线程编译,一般都会设置
- platform 选项的意思是在下一个参数里设置编译平台,这里我是vs2013,
- confirm-license opensource这两个选项是选择开源协议,否则需要配置的时候手动输入指定,一般人不关心这个,就按这个设置
- prefix 这个选项的意思是在下一个参数里设置前缀目录,主要是存放编译生成的文件,建议和我一样。
- debug-and-release 选项的意思是同时编译debug和release版本,也可以只指定只要debug或者release
- force-debug-info 选项的意思是哪怕是release版本也生成pdb文件,自己看需求是否要设置。
- nomake 这个选项的意思是在下一个参数里设置不构建某个模块。如我的设置里,去除了examples 和tests 模块。可以省点时间。
- skip 这个选项的意思是在下一个参数里设置编译代码时跳过某个模块。注意这个和前面的nomake 不一样,这个指的是代码模块。可以看到我的设置跳过了android、mac等明显windows上不可用的模块还有蓝牙模块。
那么怎么知道哪些模块可以跳过呢?qt的文档里一字没提,我用的方法是先一个都不跳,等配置完后打开源码根目录下的Makefile文件,可以明显看到一些以module开头的模块名,这些就是所有的模块了。可以自己查询每个模块的含义决定是否要跳过。
配置脚本执行完成确认是否执行成功,因为有可能你跳过某个模块后就无法配置成功了。
编译
编译很简单,使用nmake命令即可。不过可以按需编译,我只需要基本的一些库,所以我执行的是nmake module-qtmultimedia
然后就是漫长的等待。
安装
编译生成的文件存放在qtbase下。
库文件
其中dll和pdb存放在qtbase/lib中,qtbase/bin中也有备份,不过不一定全。
导入库
lib文件存放在qtbase/lib中。
插件
qt运行所必须的平台插件qwindows.dll等文件存放在qtbase\plugins\platforms里。
头文件
头文件部分是必须要特别说明的。这是qt编译后发布过程中的巨坑,qt文档中没有对此的任何描述。
qt的头文件分散在源码的各处,qtbase/include目录中只有一部分,其他的存放在和qtbase同级目录的其他目录的include文件夹中。可以手动复制过来或者编译完成后执行nmake install
但是如果你自己看这些头就会发现这些文件都只有1kb,打开后内容都是直接包含某一个其他的源文件目录下的同名文件。此时需要为每一个头文件在相同的模块源码目录下寻找同名的头文件替换
————————————————
版权声明:本文为CSDN博主「太上绝情」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bjrxyz/article/details/54017049