什么是扩展生成器
每个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 /分机/骨架/