前言
曾听闻:C++/Qt 没有包管理器,开发起来太不方便。这是一个有过 node.js 开发经验的人对 Qt 的吐槽。
确实,像 python、golang、node.js 这些编程语言都有包管理器,给用户带来了极佳的开发体验。第三方组件触手可得,妈妈再也不用担心我该怎么编译了。
我曾经思考过这个问题,觉得给 Qt 增加包管理器不难,难的是谁来牵头做。比较适合做这个事的应该是 Qt 官方,官方制定标准,Qt 开发者的软件兼容这个标准即可。
PS:我没有思考该怎么做,不过,读者看完本文可能会有点启发。
痛点
作者在维护 qtcanpool 的时候,遇到了库的管理问题,还没有上升到包管理层面(背后的逻辑是相似的)。
举个例子:qtcanpool 的库管理是在 src/libs 目录下添加库目录,然后库目录中直接存放库管理文件和源码文件(源码文件不能进一步放在子 src 目录,不然会影响头文件包含),比如下图的 qcanpool。应用程序在使用库的头文件的时候,头文件需要包含库目录名作为前缀,比如:
#include "qcanpool/extensionbutton.h"

问题描述:如果作者想引入第三方库,该如何做呢?
问题分析:通常第三方库有自己的目录结构,比如 src、example、tests、doc 等子目录,显然这不符合 qtcanpool 当前的库管理方式,需要做额外的操作。
解决方案一:在 qtcanpool/src/libs 目录下创建第三方库的名称目录,然后将第三方库 src 目录下的内容拷贝过来,再增加相关的库管理文件(pro、pri 文件)。
思考一下:这个方案有哪些问题?
- 拷贝?
- 太麻烦了
- 后续怎么升级呢?
- 拷贝新的文件覆盖老的文件,修改库管理文件。——还是麻烦
解决方案二:利用 git 的 submodule 功能,在 qtcanpool/src/libs 下创建第三方库的名称目录(如:qads),然后将第三方库以 git 子模块的形式添加到该目录下(如:Qt-Advanced-Docking-System),最后添加相关库管理文件。参考连接:http

最低0.47元/天 解锁文章
750

被折叠的 条评论
为什么被折叠?



