我可以使用ExtUtils :: MakeMaker构建系统“out of tree”构建Perl模块吗?

时间:2011-08-11 21:15:38

标签: perl build autoconf automake

我想在一个单独的目录中构建所有内容,而不是在解压缩Perl模块源的目录中添加或修改文件。这是否可以通过使用Makefile.PL的相当标准的ExtUtils::MakeMaker轻松实现? (简单来说,我的意思是一个或几个命令行参数。)如果不是,是否有任何其他构建系统支持这个?

更新/原因: Perl模块是对其构建系统为autoconf / automake / libtool的库的绑定。 Perl模块与此库一起提供,并且在顶层目录中调用make最终还构建了Perl库。我有兴趣在单独的构建树中构建整个项目。目前我做了类似于runrig建议的事情,只使用符号链接。 (cp -sru $(srcdir)/. $(builddir)/.)。到目前为止,这已经奏效,但如果有更优雅的解决方案,我想了解它。

3 个答案:

答案 0 :(得分:2)

MakeMaker已经复制了源代码并将它们构建在一个单独的目录中(这就是blib/)。您可以使用INST_* WriteMakefile()个参数控制构建位置。此示例将位置从blib/更改为foo/

INST_ARCHLIB        => "foo/arch",
INST_LIB            => "foo/lib",
INST_BIN            => "foo/bin",
INST_SCRIPT         => "foo/script",
INST_MAN1DIR        => 'foo/man1',
INST_MAN3DIR        => 'foo/man3',

此外,您必须告诉MakeMaker清理新的构建目录。

clean       => {
    FILES           => 'foo'
},

有关详细信息,请参阅"Determination of Perl Library and Installation Locations"文档中的ExtUtils::MakeMaker

答案 1 :(得分:1)

cp -R Module-Directory-0.01 Module-Directory-0.01.copy
cd Module-Directory-0.01.copy
perl Makefile.PL
make
make test
...etc.

答案 2 :(得分:0)

我最终使用了符号链接:

Perl模块提供绑定的库使用 基于autoconf / automake / libtool的构建系统。 Makefile.PL是 由Makefile.PL.in configure生成。 Makefile.PL 生成Makefile-plMakefile已被占用 autoconf / automake)。

这是Makefile.am

的相关部分
all: Makefile-pl src_deps
    $(MAKE) -f Makefile-pl

Makefile-pl: Makefile.PL
    perl Makefile.PL INSTALLDIRS=$(INSTALLDIRS) PREFIX=$(prefix)

我将第二个目标更改为:

Makefile-pl: Makefile.PL
    -[ $(srcdir) != $(builddir) ] && cp -rsu $(abs_srcdir)/. $(builddir)/.
    perl Makefile.PL INSTALLDIRS=$(INSTALLDIRS) PREFIX=$(prefix)

只要构建或安装Perl模块,这应该有效 不会导致任何文件被就地修改。