您的位置:首页 > 编程语言 > Qt开发

Qt辅助脚本工具syncqt

2011-11-27 23:09 309 查看
距离Qt在Windows下编译时
configure 问题一则已经过了半年了,重新看看syncqt相关的内容。


include目录

安装好Qt后,我们会有

bin\
src\
lib\
include\
...

可是,如果下载Qt源码的话,里面并没有include这个目录
那么,它是怎么来的:


syncqt

include目录中的东西是由syncqt这个perl脚本生成的,这是是syncqt主要的功能吧。
运行
./bin/syncqt -help


可看到用法及其参数介绍
./bin/syncqt usage:
  <module directory>    Specifies which module to sync header files for (required for shadow builds!)

  -copy                 Copy headers instead of include-fwd(default: no)
...



如何调用

下载源码,编译Qt的第一步是: configure

posix下是 shell脚本 configure
windows下是可执行程序 configure.exe

sync 这个脚本就是被configure所调用了。似乎不值得惊奇,编译时调用一次似乎也足够了


Qt5的变化

伴随着模块化,Qt分拆成几个子仓库,每个里面都有一个
sync.profile


一直以来不清楚这里面用的是一种什么语法,弄了半天原来也是Perl,是由 syncqt 调用的。
用来控制该仓库内的各个模块的头文件如何同步到include目录中
syncqt方式调用也发生了变化,除了在configure的时候被调用外,当源码更新后,执行make的时候,也会发现它被调用。

刚开始以为是Makefile中有直接的规则,后来发现没有
原来是qmake是执行时被调用的,(当pro/pri/prf变化时,make调用了qmake),详见文件

mkspecs/features/default_pre.prf


关键代码:
!build_pass:exists($$_PRO_FILE_PWD_/sync.profile) {
    qtPrepareTool(QMAKE_SYNCQT, syncqt)

    $$QMAKE_SYNCQT $$QTFWD -generator $$MAKEFILE_GENERATOR -outdir $$QMAKE_SYNCQT_OUTDIR $$_PRO_FILE_PWD_)
}



sync.profile

该文件内定义了

%modules
"QtGui" => "$basedir/src/gui"

键和值:模块和模块路径

$basedir由sync.profile所在目录确定
%moduleheaders
去哪个目录下找头文件,默认是前面的模块路径(及其子目录)
@allmoduleheadersprivate
一般,*_p.h是私有头文件,但是对某些模块,比如V8,所有头文件都是私有的
%classnames
"qdebug.h" => "QtDebug"

一般从公有头文件中提取类名,创建不包含.h后缀的头文件。但有时,我们需要QtDebug这样的头文件,尽管不对应任何类。
%mastercontent
"core"=>"#include <QtCore/QtCore>\n"
%modulepris
"QtCore"=>"$basedir/src/modules/qt_core.pri"
%explicitheaders
"qtbase" => "refs/heads/master"
除此外,还有一些
@ignore_for_*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: