PHP擴展-如何使用文件config.m4


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; 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

微信公眾號
qrcode_for_gh_61c6224cfae9_258


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM