liuliuab1 发表于 2019-3-1 00:00:00

Shiboken - 基于 Qt/C++ GUI 库绑定代码的 CPython 生成器前端插件

Shiboken - 基于 Qt/C++ GUI 库绑定代码的 CPython 生成器前端插件

Shiboken 是一个 Generator Runner 前端插件,它使用 CPython 源代码为 C++ 库生成绑定。

Generator Runner 是为便于 C++ 和 Qt 库开发语言绑定而创建的一个工具。它提供了一个框架,使得这个过程能最大可能自动化:使用 ApiExtractor 提取 C++ 头文件中的信息,通过相应前端 (用户可以自己提供) 生成某种目标语言绑定。
Generator Runner 本身比较简单,它的工作都是通过 API Extractor 和 前端 (比如 Shiboken) 来完成的。

快速编辑重构 批处理式 数字 Python IDE 集成开发环境 (自带 Cython PyInstaller 批处理工具)http://dt.digitser.cn/zh-CN/ide/idepy/index.html
Generator Runner 定义了一个前端接口类class Generator;每个前端插件 (比如 Shiboken) 只需要提供了一个函数 void getGenerators(GeneratorList* list)来返回包含 Generator 的一个链表 (QLinkedList);在调用 Generator Runner 时,通过 generatorrunner --generator-set=shiboken 命令行指定使用哪一个前端。
当编译或安装 Shiboken 时,我们会注意到和 shiboken 名字相关的有 3 个文件:shiboken_generator(.dll/.so/...) 是插件 (前端);shiboken-python*(.dll/.so/...) 是最终生成代码运行需依赖的;shiboken(.exe) 是壳文件,就是 generatorrunner --generator-set=shiboken。
在命令行 --generator-set,我们可指定 Shiboken 插件完整路径。如果不是完整路径,generatorrunner 会先合成文件名 (shiboken_generator.dll),再搜索编译时指定插件目录、QCoreApplication::libraryPaths() 返回路径。


要想为 C++ 库生成绑定,需 API Extractor 从 C++ 库头文件中提取信息,通过 typesystem 文件控制提取 (修改、重命名) 哪些信息。
信息提取后,理论上就可为各种高层语言提供绑定 (只要有相应的前端存在)。shiboken 为 CPython 生成绑定,DocGenerator 为要绑定的库生成文档。

http://forum.digitser.cn/data/attachment/forum/201605/19/132155fevczeyds5e5y1wy.jpg扫一扫关注 德云社区 微信公众号
版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载。
页: [1]
查看完整版本: Shiboken - 基于 Qt/C++ GUI 库绑定代码的 CPython 生成器前端插件