config.m4文件用於指定正在開發的擴展在類unix系統下構建時支持的選項,指定此擴展需要哪些庫以及哪些源文件;使用 GNU autoconf 語法編寫。
注意需要重新執行phpize,config.m4的修改才會生效;
在執行./configure時,所有的輸出將記錄到config.log裡,通過查看此文件可以調試config.m4。
如何從零開始創建一個PHP擴展可以參見文章PHP擴展-擴展的生成和編譯,
以下將以”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; then AC_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)
參考:Talking to the UNIX build system: config.m4
原文地址:PHP擴展-如何使用文件config.m4
微信公眾號