源码编译debug版 Qt5.14.0
1. 下载源码:
https://download.qt.io/archive/qt/5.14/5.14.0/single/qt-everywhere-src-5.14.0.tar.xz 522M
1.1. 解压缩:
tax -xvf qt-everywhere-src-5.14.0.tar.xz
得到 qt-everywhere-src-5.14.0 目录, 来到这个目录进行配置和编译.
1.2. cd qt-everywhere-src-5.14.0
2. 配置:
./configure -prefix /storage/build_qt5.14 -debug -opensource -confirm-license -no-openssl -no-opengl -qt-xcb -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc -no-compile-examples
第二次编译make时碰到了问题,有一堆函数连接不上我也不知道连接什么库。把配置简化一下,参见后面配置,不仅编译快而且能编过。
解释一下
prefix 是一会儿install的路径,如果不制定,就会安装到默认的/usr/local/ 下, 所以你先要mddir -p /storage/build_qt5.14 确保该目录存在.
debug 是编译debug版本的Qt
opensource 是选定开源版本
confirm-license 是确定下协议
其它的参数可以忽略掉
结束会提示,可以make了。
曾经遇到过瞪着眼睛看配置不过去,明明zstd 手工运行都可以通过,需要的依赖都给了,./configure 还是不过,报得错误也莫名其妙, make clean 也不管用,看configure 文件太难过了, 全部删除,重新解压再配置通过。
3. 编译
确认一下gcc 的版本,我的是 $gcc -v
gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
我的机器16核, 于是:
make -j16
还是要等一会的. 编译的过程遇到了缺少 python 的问题, sudo apt install python 解决.
编译是一种编过没有成就感,编不过就过不去的苦差事,面对一些新名字,新名词,新错误无从下手,不知道什么原因及如何处理, 有时候还是参考随软件的README来解决问题吧。
对于一些编不过的又不重要的模块,我还是采取了一些粗暴的做法, 例如修改.pro 或者Makefile 等.
以此来跳过某些module,例如 quick 模块,qtdeclarative 目录等.
还是用简单的配置文件吧: 下面配置可跳过很多模块,编译快,通过。
-prefix /storage/build_qt5.14 -debug -opensource -confirm-license -no-openssl -no-opengl -qt-xcb -skip qt3d -skip qtquickcontrols -skip qtwebchannel -skip qtactiveqt -skip qtandroidextras -skip qtdeclarative -skip qtimageformats -skip qtmacextras -skip qtx11extras -skip qtxmlpatterns -skip qtconnectivity -skip qtdoc -skip qtgraphicaleffects -skip qtlocation -skip qtmultimedia -skip qtsensors -skip qttools -skip qttranslations -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwinextras -no-compile-examples
make install
文件已被安装到 prefix 指定的目录 /storage/build_qt5.14 目录下
$ ls
bin doc examples include lib mkspecs plugins qml
4. 确认:
到bin 目录下:
$ ./qmake -v
QMake version 3.1
Using Qt version 5.14.0 in /storage/build_qt5.14/lib
如此新编译的带debug 信息的qt5.14.0已经生成. 后面就是使用的问题了.
只要搞定了qmake, 它自动找头文件(include)和库文件(lib)
单步执行,可以跟踪到Qt模块的代码里, 确实很爽了, 不过很大的代码量,视情况量力而行,拿来主义了.
5. 遇到字体问题及解决方法
QFontDatabase: Cannot find font directory /storage/build_qt5.14/lib/fonts.
Note that Qt no longer ships fonts. Deploy some (from https://dejavu-fonts.github.io/ for example) or switch to fontconfig.
结果是qt 程序显示不出文字.
解决方法:
跟踪了能显示字体的程序访问的是/usr/share/fonts/vista YaHei字体, 所以建立 lib/fonts 目录
copy /usr/share/fonts/vista YaHei 字体.到指定的fonts 目录即可. 对字体库的访问又多了一层认识.
/usr/share/fonts/vista$ cp YaHei\ Consolas\ Hybrid.ttf /storage/build_qt5.14/lib/fonts/
哇,真棒,这才是真正解决问题.