phpize # 39;配置.在PHP_NEW_EXTENSION中使用多个源文件会产生一个不做任何事情的Makefil


phpize's config.m4 with more than one source file in PHP_NEW_EXTENSION produces a Makefile that does nothing

我想写一个C扩展到PHP。这是我的config.m4。直接从helloworld,几乎

PHP_ARG_ENABLE(my_ext, whether to enable my_ext support,
[ --enable-my-ext   Enable My Ext support])
if test "$PHP_MY_EXT" = "yes"; then
  AC_DEFINE(HAVE_MY_EXT, 1, [Whether you have my ext])
  PHP_NEW_EXTENSION(my_ext, my_ext.c,  $ext_shared)
fi

当我运行phpize和./configure时,它生成了一个可以工作的Makefile。

现在,如果我向PHP_NEW_EXTENSION添加一个额外的源文件,事情就会崩溃。按照这里和这里,调用应该看起来像:

PHP_NEW_EXTENSION(foo, foo.c bar.c baz.cpp, $ext_shared)

完整语法:

PHP_NEW_EXTENSION(extname, sources [, shared [,sapi_class[, extra-cflags]]])

好的,所以我添加了额外的源文件(logging.c)到该列表:

PHP_NEW_EXTENSION(my_ext, my_ext.c, logging.c  $ext_shared)

和phpize/configure 生成一个成功运行的Makefile,但实际上并没有构建任何东西。(是的,我已经做了make distclean, phpize——clean等)

我区分了成功的Makefile和失败的Makefile,下面是它们的区别:

$ diff Makefile Makefile.broken 
14d13
< shared_objects_my_ext = my_ext.lo
16c15
< PHP_MODULES = $(phplibdir)/my_ext.la
---
> PHP_MODULES =
170,175d168
< $(phplibdir)/my_ext.la: ./my_ext.la
<   $(LIBTOOL) --mode=install cp ./my_ext.la $(phplibdir)
< 
< ./my_ext.la: $(shared_objects_my_ext) $(MY_EXT_SHARED_DEPENDENCIES)
<   $(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_my_ext) $(MY_EXT_SHARED_LIBADD)
< 

有人知道这是怎么回事吗?

顺便说一句,如果我省略了额外的源文件,我会得到编译器警告,关于该文件中的函数具有"内部链接但未定义"。

尝试移动第二个逗号

PHP_NEW_EXTENSION(my_ext, my_ext.c, logging.c $ext_shared)

PHP_NEW_EXTENSION(my_ext, my_ext.c logging.c, $ext_shared)

如果我对文档的理解正确的话,第二个参数应该是一个空格分隔的源代码列表。