[已收录]

【php扩展开发】扩展生成器

什么是扩展生成器

每个PHP的扩展都包含一些非常公共的并且非常单调的结构和文件,这些文件对所有扩展来说都是通用的。当开始一个新扩展开发的时候,如果这些公共的结构已经存在,而不需要费力去复制每个文件的内容,我们只需考虑填充功能代码那心情一定会愉快很多。

扩展生成器就是实现这些功能的脚本,帮助我们完成初始化工作.PHP源码中提供一个自带的生成器ext_skel。他在ext目录下。

ext_skel

它是一个shell脚本,仅有300多行。我们来看下关键部分代码

#生成config.m4配置文件

cat> config.m4 << eof
dnl  $ Id  $
dnl config.m4 用于扩展名$ extname

dnl 此文件中的注释以字符串'dnl'开头。
DNL删除其中必要的。此文件无效
dnl没有编辑。

dnl如果你的扩展引用了外部的东西,请使用:

DNL PHP_ARG_WITH($ extname,为 $ extname支持,
dnl确保注释已对齐:
dnl [--with- $ extname              包括$ extname support])

dnl否则使用enable:

PHP_ARG_ENABLE($ extname,是否启用 $ extname支持,
dnl确保注释已对齐:
[--enable- $ extname            启用$ extname支持])

.....省略一大串
EOF

#生成核心文件

$ ECHO_N  “ $ extname .c $ ECHO_C ” 
echo  “s / extname / $ extname / g” > sedscript
 echo  “s / EXTNAME / $ EXTNAME / g”   >> sedscript
 echo  '/ __ function_entries_here __ / r function_entries'   >> sedscript
 echo  ' / __ function_stubs_here __ / r function_stubs'   >> sedscript
 echo  '/ __ header_here __ / r ../../header'   >> sedscript
 echo  '/ __ footer_here __ / r ../../footer'   >> sedscript
 echo  '/ __ function_entries_here __ / D'   >>
sedscript echo  '/ __ function_stubs_here __ / D'  >> sedscript
 echo  '/ __ header_here __ / D'   >> sedscript
 echo  '/ __ footer_here __ / D'   >> sedscript
 if [!-z “ $ no_help ” ]; 然后
    回显 “/ confirm_ $ extname_compiled / D” >> sedscript
     echo  '/删除以下/,/ ^  *  // D' >> sedscript
     echo  's / [[:space:]]  /  *。 +  *  ///' >> sedscript
     echo  的/^/*.**/$//' >> sedscript
     echo  '/ ^ [[:space:]] *  /  * / ,/ ^ [[:space:]] *  *  // D' >>


sed -f sedscript < $ skel_dir /skeleton.c> $ extname .c

 

帮助说明

./ext_skel --help

 

它提示了我们脚本的命令行格式和支持的参数

./ext_skel --extname = module [--proto = file] [--stubs = file] [--xml [= file]]
           [--skel = dir] [--full-xml] [ -  no-help]

  --extname = module    扩展名称,全为小写字母的标识符,仅包含字母和下划线,保证在php源码ext目录下的文件夹名唯一
  --proto = file允许开发人员指定一个头文件,由此创建一系列PHP函数,表面上看就是要开发基于一个函数库的扩展,很少用
  --stubs = file仅生成文件中的函数存根,生成IDE提示文件可能有用
  --xml               生成要添加到phpdoc-svn没用的xml文档
  --skel = dir路径到骨架目录指定扩展骨架目录,如果你想在ext目录以外的地方生成,那这个有用
  --full-XML          生成 XML文档用于自包含的延伸部(未尚未实现)没用
  --no的帮助不尝试是好的,并创建代码中的注释和辅助功能测试,如果该模块编译去除生成测试函数和注释等内容,除非你很熟练,不建议操作

 

示例

/ usr / local / src / php- 7.2。15 / ext / ext_skel --extname = twinkle_log --skel = / usr / local / src / php- 7.2。15 /分机/骨架/

 

免责申明:
1. 本站所有教程、文章分享目的仅供大家学习和交流,资源连接来自于网络,非本站发布,本站也不存储任何资源!
2. 如有无法查看或链接失效,烦请报告联系管理员处理!
3. 本站无法保证资源质量及其时效性,恕不接受任何提问。
4.本站即不保存任何资源,也不对任何链接作品负责,希望大家赞助本站,费用仅维持本站的日常运营所需!
5. 百码云无法保证文章教程或资源的完善与安全,请自行检测解决。
6. 通过本站收集链接的相关资源,严禁杜绝任何形式的正式商业用途,请前往官方购买。
7. 但凡通过本站链接导航下载的任何作品,虽不归本站所有,但在研究学习的前提下,请务必在下载24小时后删除。
百码云资源站仅提供学习的平台,所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,并不承担任何法律责任,如果对您的版权或者利益造成损害,请提供相应的资质证明,我们将于3个工作日内予以删除。本文章采用BY-NC-SA 4.0 《国际知识共享署名许可协议4.0》 进行许可 。
百码云 » 【php扩展开发】扩展生成器

提供最优质的资源集合

关于VIP 站内帮助