config.m4檔案用於指定正在開發的擴充在類unix系統下構建時支援的選項,指定此擴充需要哪些庫以及哪些源檔案;使用 GNU autoconf 文法編寫。
注意需要重新執行phpize,config.m4的修改才會生效;
在執行./configure時,所有的輸出將記錄到config.log裡,通過查看此檔案可以調試config.m4。
如何從零開始建立一個PHP擴充可以參見文章PHP擴充-擴充的產生和編譯,
config.m4檔案常用的語句和宏
以下將以”myext”作為正在開發的副檔名稱進行舉例:
1. 由使用者輸入配置選項
比如–enable-myext, –with-myext-includedir=DIR
PHP_ARG_ENABLE(myext, whether to enable myext support,
[ --enable-ext Enable ext support])
在configure –help時將輸出:–enable-ext Enable ext support
PHP_ARG_WITH(myext-includedir, for myext header,
[ --with-myext-includedir=DIR myext header files], no, no)
在configure –help時將輸出:–with-myext-includedir=DIR myext header files
2. 輸出資訊
AC_MSG_CHECKING(message), 在執行configure命令時輸出”checking “;
AC_MSG_RESULT(value), 輸出check的結果;
AC_MSG_ERROR(message), 輸出一條訊息並退出configure的執行;
3. 添加包含路徑
PHP_ADD_INCLUDE(path), 添加編譯時間的包含路徑;
4. 連結第三方庫
PHP_ADD_LIBRARY_WITH_PATH(),添加編譯時間的連結庫路徑
PHP_ADD_LIBRARY(), 添加連結庫;
5. 其他
AC_DEFINE(name,value,description), 向php_config.h添加一個define:#define name value // description;
AC_TRY_COMPILE (includes, function-body, [action-if-found [, action-if-not-found]])
樣本如下:
...AC_MSG_CHECKING(PHP version)...AC_MSG_RESULT([$PHP_VERSION])...PHP_MAJOR_VERSION=`echo $PHP_VERSION | sed -e 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/ \1/g' 2>/dev/null`if test $PHP_MAJOR_VERSION -lt 5; thenAC_MSG_ERROR([need at least PHP 5 or newer])fi...PHP_ADD_INCLUDE([$ext_srcdir/snappy])...PHP_ADD_LIBRARY_WITH_PATH(snappy, $LIBSNAPPY_LIBDIR, SNAPPY_SHARED_LIBADD)...LIBNAME=stdc++PHP_ADD_LIBRARY($LIBNAME, , SNAPPY_SHARED_LIBADD)