PHP中深入浅析的config.m4

  介绍

本篇文章为大家展示了深入浅析PHP中的config.m4,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

最近在看PHP扩展相关的东西,虽然来来回回编辑了好多次配置。m4,并且也在技术社区看到了<代码>配置。m4是什么?什么作用?>

。m4后缀的文件一般被当做通用的宏处理,来看下官方的介绍:

GNU m4的实现传统Unix宏处理器。这主要是SVR4兼容虽然有一些扩展(例如,处理超过9位置参数宏)。GNU M4还包括文件的内置函数,运行shell命令、做算术,等。

GNU M4宏处理器,它将输入复制到输出扩大宏。宏是内装式或用户定义的,可以有任意数量的参数。除了做宏扩展,m4装入的功能包括命名文件,运行UNIX命令,做整数运算,以各种方式操纵文本、递归等……可以使用m4作为编译器的前端或宏处理器本身。

GNU M4的一个最大的用户是GNU Autoconf项目。

简单而通俗易懂的翻译下:GNU M4是传统UNIX宏处理器的一种实现方式,它还具有一些内置功能,包括文件,壳牌、运算等。
作为一个宏处理器,将输入复制到扩展的输出,它要么内置,要么用户定义,且可以接受参数。另外这个还有内置函数,包括命名文件,运行UNIX命令,执行整数运算,以各种方式操作文本、递归等.M4既可以作为编译器的前端使用,也可以作为自己的宏处理器使用。
GNU M4的最大用户之一是GNU AutoCOF项目。

到这里大致了解到,它是作为一个宏处理器,然后再想想PHP扩展里面用到它做了什么,先看看PHP源码扩展目录ext中bcmath中的代码:

黑暗   黑暗与Id美元   黑暗与光明      PHP_ARG_ENABLE(公元前bcmath,是否启用风格精确数学函数,   (——enable-bcmath启用bc风格精确数学函数))      如果测试“PHP_BCMATH"美元;!=皀o";然后   PHP_NEW_EXTENSION (bcmath bcmath。c \   libbcmath/src/添加。c libbcmath/src/div。c libbcmath/src/init。c libbcmath/src/底片。c libbcmath/src/outofmem。c libbcmath/src/raisemod。c libbcmath/src/rt。c libbcmath/src/订阅。c \   libbcmath/src/比较。c libbcmath/src/divmod。c libbcmath/src/int2num。c libbcmath/src/num2long。c libbcmath/src/输出。c libbcmath/src/recmul。c \   libbcmath/src/獭 libbcmath/src/0。c libbcmath/src/调试。c libbcmath/src/doaddsub。c libbcmath/src/nearzero。c libbcmath/src/num2str。c libbcmath/src/提高。c \   libbcmath/src/rmzero。c libbcmath/src/str2num.c,   $ ext_shared -I@ext_srcdir@/libbcmath/src)   PHP_ADD_BUILD_DIR ($ ext_builddir/libbcmath/src)   AC_DEFINE (HAVE_BCMATH 1[无论你bcmath])   fi

【黑暗在m4语法中相当于行注释的意思】

一些书籍中说明:config.m4是包含了配置时所执行的指令,例如上面这段代码很显然表明了,我写这个bcmath扩展,需要libbcmath/src/add.c libbcmath/src/div。c等等这些外部c源文件.PHP_NEW_EXTENSION()则是PHP定义的一个宏,最后的美元ext_shared参数用来声明这个扩展不是一个静态模块,而是在PHP运行时动态加载的。
好像我感觉还是不算太清晰,我在用一段白话来试图描述下吧。
配置。m4文件中的代码会进入配置脚本的,也就是配置。这里面包含扩展的开关,扩展的名称,所需要的代码等等你想做的事情。为什么这么玩呢,因为PHP是使用autoconf、automake, libtool 3件套来构建扩展的,这三剑客一起使用,威力很大,但是也有点难。当扩展是PHP源码中的一部分时,我们可以在顶级目录运行buildconf脚本,它会扫描每个子目录中的config.m4文件,然后他会把所有的配置文件配置。m4合成一个包含所有配置开关的配置脚本。这样的话,每个扩展就可以自己实现自己的配置检查,检查其所需的任何依赖和系统支持。区域这些想法和过程,宏检查和配置等工作,PHP选择了使用通过的m4脚本来配置

这里配置。4文件的探索告一段落了,好像明白了一些了~ ~”——

另外附一些PHP的宏,buildconf处理config.m4所用:

AC_MSG_CHECKING(消息)
在执行配置命令时输出“检查”等信息。

AC_MSG_RESULT(值)
取得AC_MSG_CHECKING的执行结果,一般情况下应值为yes或no。

AC_MSG_ERROR(消息)
在执行配置命令时输出一条错误消息消息并中止脚本的执行。

AC_DEFINE(名称、值描述)
向php_config。h添加一行定义:#定义名称值//描述(这对模块的条件编译很有用。)

AC_ADD_INCLUDE(路径)
添加一条编译器的包含路径,比如用于模块需要为头文件添加搜索路径。

PHP中深入浅析的config.m4