最近开发ARM应用,使用Qt 6.2版本交叉编译源码,编译倒是没什么问题,也很快就编译好了。正准备使用Qt库编译写好的程序时,发现使用QMake编译不过了,报Qml缺少连接,最后询问了维护人员,是一个内部的问题,还没有修改好,建议使用CMake编译,无奈将项目pro工程修改为CMake工程,如无意外就编译通过了。
使用几天发现后,使用QtCreator支持的Qt CMake工程,编译时间比QMake的长,大约慢30%到50%的时间,QtCreator卡顿频繁,在频繁读取文件,修改Qml文件后编译运行时间更长。当时想可能是QtCreator的问题了,于是使用命令行执行编译,结果一样的编译的慢啊。
后来发现,编译Qml前Qt CMake会复制Qml,类型文件和依赖文件到编译目录中,这就大大降低了编译速度。
目前来看,Qt CMake还不是很成熟,至少它优化得不太好。回想Qt 6.0更新的时候都没有将全部Qt 5.15版本的模块移植进来,搞了一个按揭移植,移植到Qt 6.4也没有完全移植完成,比如Location模块,文末有截图和访问链接证实。
QMake构建Qt源码实在太难扩展,但换做CMake构建的确是构建方便了,如果只为构建Qt源码方便,那大可不必将QMake项目切换到CMake项目,如果没接触过CMake的工程师,贸然切换,只会徒增开发成本。
这里不是指CMake不好,平时君君也会首选CMake来管理跨平台纯C项目,用起来也很棒。这里的不好是指Qt CMake不好,一堆moc,uic,qml代码生成管理工具,都通过CMake处理,目前看来是优化得不太好。
君君最后建议再等等Qt的更新,Qt 6.x的最后一个版本或者Qt 7.0以上才切换到CMake管理项目吧。
详情:https://www.qt.io/blog/qt-6.4-released