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 就能认出来。---有外部依赖比如要链接 libxmlPHP_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我存不存在、我需要啥、去哪找编译器按这个配置决定怎么编你的扩展。