[software development] libreCAD源码的构建方式,为啥建议初学者使用qmake而不是cmake?
Tofloor
poster avatar
deepin
2023-10-13 02:08
Author

前一两个月,我自己简单学习了Qt开发套件的使用和cmake的项目基础管理使用,然后把librecad源码从官网拉了下来。

然后,librecad源码想要在Qt Creator中正常运行或者执行,QT初学程序开发者需要通过qmake方式进行构建,并在系统中安装boost库。

基本安装步骤如下:

1.安装Qt Creator社区5.0以上版本(或Qt社区版);

image.png

2.如果不会安装boost库,可以直接在deepin系统安装librecad的官方软件,因为librecad的官方软件默认会帮你自动安装boost库

3.在Qt Creator代码编辑器中,通过librecad.pro文件导入并构建librecad的源代码,librecad.pro就是qmake自动化构建项目的脚本文件

image.png

60b349c3a2960576e5589ea878af7d61.png

完成以上安装步骤后,我们就可以运行其源代码,可能librecad源代码在构建的过程中有些库的cpp和h文件出现代码报错的情况,但是只要能正常运行就不用管它。

之所以把上面的安装步骤搞定,主要是因为自己需要一边熟悉其源代码,另一方面是想看其librecad项目的树形结构,要知道都使用哪些第三方库核心库ui类action事件类等等,然后自己在通过cmake方式进行项目重构。


以下内容,是我自己这段通过librecad源代码来折腾cmake的构建使用感想:

1.Qt Creator目前在用cmake对于项目的管理,即使是写脚本方式也没有qmake那么成熟,需要提前重学一遍cmake相关的脚本编写内容,不是简单学会cmake 、make 、make install几个简单编译执行命令就行了;

2.在Qt社区,如果是qt相关的开源老项目,qmake的案例其实比cmake要完善;

3.在libreCAD源码项目结构的实际接触时,库的依赖关系交叉的错综复杂。比如ui类与Action类之间有相互交叉调用行为,这在cmake中去构建并调用源码库的头文件时,有些CPP实现类不得不用绝对路径去正常调用头文件,但是绝对路径的头文件调用方式并不适用于大型项目的程序编写。

4.还是依据第三点的内容,libreCAD源码中ui类与Action类之间有相互交叉调用行为,实际上是依赖的双向行为,而cmake相关的命令或脚本编码对于源码库的调用是单向行为,也就是依赖的头文件库调用必须是单向进行。
image.png

5.使用cmake方式构建,在我的苹果MacOS系统中即便在CmakeLists.txt文件中设置了uic自动生成ui_xxx_.h头文件,但是在Qt Creator中无法找到其ui_xxx_.h头文件路径直接报错,可是Qt Creator在项目目录中会显示Build目录中ui_xxx_.h头文件。现在,你只能在终端重新通过uic命令来生成ui_xxx_.h头文件,而且当UI文件较多时,其uic终端命令的操作方式就变的不是很方便。

image.png

6.针对第5个问题,如果你真要使用cmake构建,我的建议是不要用**UI设计模版方式(xxx.ui)**来编写界面和窗口,而是自己重新通过.cpp和.h文件实现ui界面,这样程序在编译、源码库的分离更加稳定。

image.png

7.当你实现了源码库架构上的彻底分离、更多相对路径下的头文件调用、UI类的重新编写后,你最后需要运行项目,如果不会模块化程序的debug定位查找,那么Cmake执行报错的内容你有时候可能会无从下手,因为有些报错信息你接触的并不多。

.......

最后,我并不是说Cmake不能管理项目,而是librecad在qmake的构建方式已经能够正常跑项目,你对在cmake不太熟练使用的情况下完全可以先用qmake去赶进度,快速去熟悉项目代码的具体内容,等qmake方式重构完善后再用cmake尝试会更加稳妥。

Reply Favorite View the author
All Replies
wlly-lzh
deepin
2023-10-13 02:30
#1

祝学习顺利。

Reply View the author
deepin
2023-10-13 06:23
#2
wlly-lzh

祝学习顺利。

😏 学习要花很多时间。

Reply View the author
软件技术就是生产力
deepin
2023-10-13 07:05
#3
The user is banned, and the content is hidden.
deepin
2023-10-13 07:12
#4
软件技术就是生产力
The user is banned, and the content is hidden.

😂

Reply View the author
dgmenghuan
deepin
2023-10-13 16:16
#5

有感而发

Reply View the author