午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:172日期:2022-09-09 10:50:19

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

.m4后綴的文件一般被當做 通用的宏處理,來看下官方的介紹:

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.

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

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

dnldnl $Id$dnlPHP_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語法中相當于行注釋的意思】

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

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

標簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 日韩中文字幕在线观看视频 | av片网站 | 免费在线中文字幕 | 亚洲九九色 | 91精品片 | 18视频在线观看网站 | 丰满少妇久久久久久久 | 亚洲最大的网站 | 伊人爱爱网 | 天干夜夜爽爽日日日日 | 自拍偷拍 亚洲 | 人人看超碰| 亚洲精品入口 | 成人精品影院 | 欧美日韩精品久久久 | 亚洲国产成人自拍 | 日韩在线观看一区二区三区 | 国产精品日 | 中文视频在线观看 | 国产激情免费 | 午夜一级视频 | 精品久久久久久久久久久aⅴ | 天天干天天干天天操 | 欧美精品中文 | 四虎影院新网址 | aaaaaa毛片 | 愉拍自拍 | 激情九月婷婷 | 91午夜在线 | 亚洲第四页| 久操视屏 | 亚洲91久久 | 久久免费在线视频 | 亚洲视频精品 | 麻豆视频免费在线 | 午夜精品久久久久99蜜桃最新版 | 欧美日韩高清一区二区三区 | 亚洲成人免费视频 | 欧美另类v| 国产天堂网| 免费的黄色的网站 |