欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

有關(guān)PHP 中 config.m4 的探索

 更新時(shí)間:2020年08月26日 14:17:40   作者:微風(fēng)伏面  
這篇文章主要介紹了PHP 中 config.m4 的探索,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

最近在看php擴(kuò)展相關(guān)的東西,雖然來(lái)來(lái)回回編輯了好多次config.m4,并且也在技術(shù)社區(qū)看到了 config.m4是什么?什么作用? 類的問(wèn)題,但是還是覺(jué)得有必要在深入的了解下。

.m4后綴的文件一般被當(dāng)做 通用的宏處理,來(lái)看下官方的介紹:

GNU M4 is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible although it has some extensions (for example, handling more than 9 positional parameters to macros). GNU M4 also has built-in functions for including files, running shell commands, doing arithmetic, etc.

GNU M4 is a macro processor in the sense that it copies its input to the output expanding macros as it goes. Macros are either builtin or user-defined and can take any number of arguments. Besides just doing macro expansion, m4 has builtin functions for including named files, running UNIX commands, doing integer arithmetic, manipulating text in various ways, recursion etc... m4 can be used either as a front-end to a compiler or as a macro processor in its own right.

One of the biggest users of GNU M4 is the GNU Autoconf project.

簡(jiǎn)單而通俗易懂的翻譯下:GNU M4是傳統(tǒng)UNIX宏處理器的一種實(shí)現(xiàn)方式,它還具有一些內(nèi)置功能,包括文件,shell,運(yùn)算等。
作為一個(gè)宏處理器,將輸入復(fù)制到擴(kuò)展的輸出,它要么內(nèi)置,要么用戶定義,且可以接受參數(shù)。另外這個(gè)還有內(nèi)置函數(shù),包括命名文件、運(yùn)行UNIX命令、執(zhí)行整數(shù)運(yùn)算、以各種方式操作文本、遞歸等。M4既可以作為編譯器的前端使用,也可以作為自己的宏處理器使用。
GNU M4的最大用戶之一是GNU AutoCOF項(xiàng)目。

到這里大致了解到,它是作為一個(gè)宏處理器,然后再想想PHP擴(kuò)展里面用到它做了什么,先看看 php源碼擴(kuò)展目錄ext中 bcmath 中的代碼:

dnl
dnl $Id$
dnl

PHP_ARG_ENABLE(bcmath, whether to enable bc style precision math functions,
[ --enable-bcmath Enable bc style precision math functions])

if test "$PHP_BCMATH" != "no"; then
 PHP_NEW_EXTENSION(bcmath, bcmath.c \
libbcmath/src/add.c libbcmath/src/div.c libbcmath/src/init.c libbcmath/src/neg.c libbcmath/src/outofmem.c libbcmath/src/raisemod.c libbcmath/src/rt.c libbcmath/src/sub.c \
libbcmath/src/compare.c libbcmath/src/divmod.c libbcmath/src/int2num.c libbcmath/src/num2long.c libbcmath/src/output.c libbcmath/src/recmul.c \
libbcmath/src/sqrt.c libbcmath/src/zero.c libbcmath/src/debug.c libbcmath/src/doaddsub.c libbcmath/src/nearzero.c libbcmath/src/num2str.c libbcmath/src/raise.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, [Whether you have bcmath])
fi

【dnl 在m4語(yǔ)法中相當(dāng)于行注釋的意思】

一些書籍中說(shuō)明: config.m4是包含了配置時(shí)所執(zhí)行的指令,例如上面這段代碼很顯然表明了,我寫這個(gè)bcmath擴(kuò)展,需要libbcmath/src/add.c,libbcmath/src/div.c 等等這些外部c源文件。PHP_NEW_EXTENSION()則是PHP定義的一個(gè)宏,最后的$ext_shared參數(shù)用來(lái)聲明這個(gè)擴(kuò)展不是一個(gè)靜態(tài)模塊,而是在php運(yùn)行時(shí)動(dòng)態(tài)加載的。
好像 我感覺(jué)還是不算太清晰,我在用一段白話來(lái)試圖描述下吧。
config.m4文件中的代碼會(huì)進(jìn)入配置腳本的,也就是 configure。這里面包含 擴(kuò)展的開(kāi)關(guān),擴(kuò)展的名稱,所需要的代碼等等你想做的事情。為什么這么玩呢,因?yàn)镻HP是使用 autoconf, automake, and libtool 3件套來(lái)構(gòu)建擴(kuò)展的,這3劍客一起使用,威力很大,但是也有點(diǎn)難。當(dāng)擴(kuò)展是PHP源碼中的一部分時(shí),我們可以在頂級(jí)目錄 運(yùn)行buildconf腳本,它會(huì)掃描每個(gè)子目錄中的config.m4文件,然后他會(huì)把所有的配置文件config.m4合成一個(gè) 包含所有配置開(kāi)關(guān)的 配置腳本。 這樣的話,每個(gè)擴(kuò)展就可以自己實(shí)現(xiàn)自己的配置檢查,檢查其所需的任何依賴和系統(tǒng)支持。區(qū)域這些想法和過(guò)程,宏檢查和配置等工作,PHP選擇了使用通過(guò)的M4腳本來(lái)配置

這里config.4文件的探索告一段落了,好像明白了一些了~~-。-

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

AC_MSG_CHECKING(message)
在執(zhí)行 configure 命令時(shí)輸出“checking ”等信息。

AC_MSG_RESULT(value)
取得 AC_MSG_CHECKING 的執(zhí)行結(jié)果,一般情況下 value 應(yīng)為 yes 或 no。

AC_MSG_ERROR(message)
在執(zhí)行 configure 命令時(shí)輸出一條錯(cuò)誤消息 message 并中止腳本的執(zhí)行。

AC_DEFINE(name,value,description)
向 php_config.h 添加一行定義:#define name value // description (這對(duì)模塊的條件編譯很有用。)

AC_ADD_INCLUDE(path)
添加一條編譯器的包含路徑,比如用于模塊需要為頭文件添加搜索路徑。

AC_ADD_LIBRARY_WITH_PATH(libraryname,librarypath)
指定一個(gè)庫(kù)的連接路徑。

AC_ARG_WITH(modulename,description,unconditionaltest,conditionaltest)
這是一款比較強(qiáng)大的宏,用于將模塊的描述 description 添加到“configure –help”命令的輸出里面。PHP 會(huì)檢查當(dāng)前執(zhí)行的 configure 腳本里面有沒(méi)有–with- 這個(gè)選項(xiàng)。 如果有則執(zhí)行 unconditionaltest 語(yǔ)句(比如 –with-myext=yes 等), 此時(shí),選項(xiàng)的值會(huì)被包含在 $withval 變量里面。否則就執(zhí)行 conditionaltest 語(yǔ)句。

PHP_EXTENSION(modulename, [shared])
這個(gè)是配置你的擴(kuò)展時(shí) PHP 必定調(diào)用的一個(gè)宏。你可以在模塊名后面提供第二個(gè)參數(shù),用來(lái)表明是否將其編譯為動(dòng)態(tài)共享模塊。這會(huì)導(dǎo)致在編譯時(shí)為你的源碼提供一個(gè) COMPILE_DL_ 的定義。

上述有查到以下頁(yè)面索取資料:
https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_72/com.ibm.aix.genprogc/m4macro.htm
https://zh.wikipedia.org/wiki/M4_(%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80)
https://blog.csdn.net/timekeeperl/article/details/50738164
https://docstore.mik.ua/orelly/webprog/php/ch14_04.htm

總結(jié)

到此這篇關(guān)于PHP 中 config.m4 的探索的文章就介紹到這了,更多相關(guān)PHP 中 config.m4內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PHP中Session可能會(huì)引起并發(fā)問(wèn)題

    PHP中Session可能會(huì)引起并發(fā)問(wèn)題

    Session 中文沒(méi)有一個(gè)統(tǒng)一的譯法,我習(xí)慣上譯為會(huì)話。關(guān)于session的意義大家都應(yīng)該清楚: 其實(shí)是在瀏覽某個(gè)網(wǎng)站時(shí),在瀏覽器沒(méi)有關(guān)閉的情形之下,一個(gè)web應(yīng)用的開(kāi)始和結(jié)束。一個(gè)session可以包括數(shù)次http的請(qǐng)求和應(yīng)答
    2015-06-06
  • ThinkPHP的I方法使用詳解

    ThinkPHP的I方法使用詳解

    ThinkPHP的I方法是眾多單字母函數(shù)中的新成員,主要用于更加方便和安全的獲取系統(tǒng)輸入變量,可以用于任何地方。這篇文章主要介紹了ThinkPHP的I方法,需要的朋友可以參考下
    2014-06-06
  • thinkPHP中鉤子的使用方法實(shí)例分析

    thinkPHP中鉤子的使用方法實(shí)例分析

    這篇文章主要介紹了thinkPHP中鉤子的使用方法,結(jié)合實(shí)例形式分析了thinkPHP鉤子的創(chuàng)建、添加、使用等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-11-11
  • smarty半小時(shí)快速上手入門教程

    smarty半小時(shí)快速上手入門教程

    這篇文章主要介紹了smarty半小時(shí)快速上手入門教程,以實(shí)例的形式分析了smarty在實(shí)際使用過(guò)程中的屬性、方法及具體用法,需要的朋友可以參考下
    2014-10-10
  • php面向?qū)ο蠡A(chǔ)詳解【星際爭(zhēng)霸游戲案例】

    php面向?qū)ο蠡A(chǔ)詳解【星際爭(zhēng)霸游戲案例】

    這篇文章主要介紹了php面向?qū)ο蠡A(chǔ),結(jié)合星際爭(zhēng)霸游戲案例詳細(xì)分析了PHP面向?qū)ο箢悺⒗^承、重載、接口等相關(guān)概念與使用技巧,需要的朋友可以參考下
    2020-01-01
  • 用Laravel輕松處理千萬(wàn)級(jí)數(shù)據(jù)的方法實(shí)現(xiàn)

    用Laravel輕松處理千萬(wàn)級(jí)數(shù)據(jù)的方法實(shí)現(xiàn)

    這篇文章主要介紹了用Laravel輕松處理千萬(wàn)級(jí)數(shù)據(jù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • php 訪問(wèn)oracle 存儲(chǔ)過(guò)程實(shí)例詳解

    php 訪問(wèn)oracle 存儲(chǔ)過(guò)程實(shí)例詳解

    這篇文章主要介紹了php 訪問(wèn)oracle 存儲(chǔ)過(guò)程實(shí)例詳解的相關(guān)資料,這里附有實(shí)例代碼,幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-01-01
  • Thinkphp開(kāi)發(fā)--集成極光推送

    Thinkphp開(kāi)發(fā)--集成極光推送

    極光推送(JPush)是獨(dú)立的第三方云推送平臺(tái),致力于為全球移動(dòng)應(yīng)用開(kāi)發(fā)者提供專業(yè)、高效的移動(dòng)消息推送服務(wù)。本文講述如何在將極光推送合到ThinkPHP框架中,
    2017-09-09
  • Laravel中使用自己編寫類庫(kù)的3種方法

    Laravel中使用自己編寫類庫(kù)的3種方法

    這篇文章主要介紹了Laravel中使用自己編寫類庫(kù)的3種方法,本文講解了增加可直接實(shí)例化的類、增加可直接調(diào)用的函數(shù)、增加稍微復(fù)雜的類庫(kù)三種方式,需要的朋友可以參考下
    2015-02-02
  • php實(shí)現(xiàn)產(chǎn)品加入購(gòu)物車功能(1)

    php實(shí)現(xiàn)產(chǎn)品加入購(gòu)物車功能(1)

    這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)產(chǎn)品加入購(gòu)物車功能,具有一定的參考價(jià)值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評(píng)論