我不想在Perl模块源代码解包的目录中添加或修改文件,而是想在单独的目录中构建所有内容。对于使用ExtUtils::MakeMaker
的相当标准的Makefile.PL
,这是否容易实现?(这里的简单是指一个或几个命令行参数。)如果不支持,其他构建系统支持这个吗?
更新/原因: Perl模块是绑定到一个库,其构建系统是基于autoconf
/automake
/libtool
的。Perl模块与这个库一起发布,并且调用顶级目录中的make
最终也会构建Perl库。我对在一个单独的构建树中构建整个项目感兴趣。目前,我做了一些类似于runrig建议的事情,只使用符号链接。( cp -sru $(srcdir)/. $(builddir)/.
)。到目前为止,这是有效的,但如果有一个更优雅的解决方案,我想看看它。
MakeMaker已经复制了源代码并将它们构建在一个单独的目录中(这就是blib/
)。您可以使用WriteMakefile()
的INST_*
参数集来控制构建位置。本例将位置从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'
},
参见ExtUtils::MakeMaker文档中的"确定Perl库和安装位置"获取更多信息。
cp -R Module-Directory-0.01 Module-Directory-0.01.copy
cd Module-Directory-0.01.copy
perl Makefile.PL
make
make test
...etc.
我最终使用了symlinks:
Perl模块提供绑定的库使用基于autoconf
/automake
/libtool
的构建系统。Makefile.PL
是由configure
从Makefile.PL.in
生成。Makefile.PL
生成Makefile-pl
(Makefile
已被占用)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模块,这应该就可以工作不会导致任何文件被就地修改。