Qt5编译源码 (三)之 解密 configure 脚本

写在前面

编译 Qt5 源码是个力气活,其各种库的依赖关系很复杂,如果自己编译,需要安装很多系统库及其头文件。

配置阶段,它自己会进行环境检测,依赖测试,对于依赖条件不满足的组件或者模块进行禁用操作。如果想启用某个模块,可能因为依赖不足多次出现配置失败的结果。

如果知道配置工具的工作原理,可以配置之前去查某个模块的依赖项,当然,这没有多少必要性,纯属个人兴趣。

configure 脚本

先看一下 Qt5.15 的 configure 文件结构。全文件分以下几部分

  • script initialization
  • utility functions
  • operating system detection
  • Verify Xcode installation on Mac OS
  • Qt version detection
  • initalize variables
  • parse command line arguments
  • help - interactive parts of the script _after_ this section please
  • platform detection
  • command line and environment validation
  • build tree initialization
  • build qmake
  • create a qt.conf for the Qt build tree itself
  • configure and build top-level makefile

它们完成的工作主要有:

  • 初始化工作环境和检查编译器工具等
  • 定义了几个函数,用于解析 qmake.conf,获取变量值,被下面的编译 qmake 过程引用
  • 检测操作系统,主要是区分 Win 系、Unix 系,Mac 是个特例
  • 如果是 Mac 检测 Mac 上的编译环境
  • 检测当前Qt版本
  • 初始化几个变量,QTDIR OPT_SHADOW CFG_SILENT CFG_DEV等等
  • 解析命令行参数
  • 帮助信息,如果是 help 打印帮助信息并退出
  • 检测编译平台
  • 命令行和环境验证,主要验证 QMAKESPEC 是否有效,指定的平台是否支持
  • 初始化构建树,检测是不是 shadow build;如果是 shadow build,在当前目录下新建一些子目录
  • 编译 qmake 工具
  • 给本次构建树生成一个 qt.conf 文件
  • 配置并构建顶层 Makefile ,生成各模块的 Makefile 文件

configure 脚本执行的最后一条命令是

1
qmake path-for-src-root -- args-for-configure

其中,path-for-src-root 表示源码目录根目录;args-for-configure 表示执行 configure 脚本时的所有参数; -- 符号会把后面的所有参数传递下去,传递给qt.pro,传递给 qt_configure.prf,还有 qtbase/configure.pri 等等。

 结尾

后面的配置过程工作就交给 qmake 去完成了 —— 检测配置项是否有效,检测系统是否支持某配置项,检测是否启用或者禁用某特性等等。

如果看旧版本的源码,会发现 qbase/configure 文件有7、8千行之多,而可能从5.6开始 qbase/configure 只有8百多行。砍掉的部分工作都交给 qmake 去做了。我可能把 qmake 的工作原理放到下一篇文章了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值