perl构建模块,来自其他模块的c源代码

时间:2011-10-12 14:36:57

标签: perl perl-module xs

我正在开发一个模块,我希望有两个后端,Module(::PerlArray)Module::PDL可以取决于Module)。两者都需要访问functions.c/.h文件才能构建。该文件具有模块所需的相当复杂的逻辑。有没有一种方法可以将它与系统上的Module::PP保持一致,然后将其添加到EU::MMM::B中的相应构建标记(给定这里的复杂性可能是后者)?

更直观地说明

--Module--
Module.pm
Module/PerlArray.pm
Module/PerlArray.xs (#include functions.h
              #include perlarray_backend.h)
Module/src/functions.c
Module/src/perlarray_backend.c
Module/inc/functions.h
Module/inc/perlarray_backend.h

--Module::PDL--
Module/PDL.pm
Module/PDL.xs (#include functions.h /*from Module*/
               #include pdl_backend.h)
Module/src/pdl_backend.c
Module/inc/pdl_backend.h

并且编译使函数.o和链接。我确定我可以弄清楚如何正确设置标志但是如何让Module在安装时保留functions.c文件,如何在安装Module::PDL时找到它?我可以在某个位置放置functions.c/.h吗?

2 个答案:

答案 0 :(得分:1)

你看过DBI了吗?它完成了你的建议:它安装了DBD驱动程序可以在其XS代码中包含的一些.h文件,以及DBD驱动程序可以调用的库。

答案 1 :(得分:0)

模块应该可以独立安装。也就是说,如果我安装了必备的Perl模块(但不一定仍然以源代码形式存在),那么应该可以将所有模块安装在一个分布式tar文件中,而无需参考任何其他模块的源代码。

你有选择。一种方法是让一个源目录创建几个分布式tar球,它们每个都可以在分布式源中拥有共享function.[ch]的副本。

另一个主要选项是将两个模块捆绑到一个分布式tar球中。