config.m4 编译配置 是啥:./configure 运行时读的脚本,决定你的扩展要不要编译、依赖啥库、怎么找库。---最简单的 m4,没有外部依赖:PHP_ARG_ENABLE([myext],[whether to enable myext],[AS_HELP_STRING([--enable-myext],[Enable myext])])iftest"$PHP_MYEXT"!="no";thenPHP_NEW_EXTENSION(myext,myext.c,$ext_shared)fi 就这几行,运行./configure--enable-myext 就能认出来。---有外部依赖(比如要链接 libxml):PHP_ARG_WITH([myext],[formyext support],[AS_HELP_STRING([--with-myext],[Includemyext])])iftest"$PHP_MYEXT"!="no";then# 找头文件在不在AC_CHECK_HEADER([libxml/parser.h],[],[AC_MSG_ERROR([libxml2 header not found])])# 链接库PHP_ADD_LIBRARY(xml,1,MYEXT_SHARED_LIBADD)PHP_NEW_EXTENSION(myext,myext.c,$ext_shared)fi-----enable vs--with 区别: ┌────────────────┬────────────────────────────────────────────────┐ │ │ 用途 │ ├────────────────┼────────────────────────────────────────────────┤ │PHP_ARG_ENABLE│ 纯开关,没有外部库 │ ├────────────────┼────────────────────────────────────────────────┤ │PHP_ARG_WITH│ 需要指定外部库路径,如--with-myext=/usr/local │ └────────────────┴────────────────────────────────────────────────┘---多个.c 文件:PHP_NEW_EXTENSION(myext,myext.c utils.c parser.c,$ext_shared)空格分隔,全列上去。---一句话: m4 就是告诉./configure"我存不存在、我需要啥、去哪找",编译器按这个配置决定怎么编你的扩展。