我想在一个单独的目录中构建所有内容,而不是在解压缩Perl模块源的目录中添加或修改文件。这是否可以通过使用Makefile.PL
的相当标准的ExtUtils::MakeMaker
轻松实现? (简单来说,我的意思是一个或几个命令行参数。)如果不是,是否有任何其他构建系统支持这个?
更新/原因: Perl模块是对其构建系统为autoconf
/ automake
/ libtool
的库的绑定。 Perl模块与此库一起提供,并且在顶层目录中调用make
最终还构建了Perl库。我有兴趣在单独的构建树中构建整个项目。目前我做了类似于runrig建议的事情,只使用符号链接。 (cp -sru $(srcdir)/. $(builddir)/.
)。到目前为止,这已经奏效,但如果有更优雅的解决方案,我想了解它。
答案 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-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模块,这应该有效 不会导致任何文件被就地修改。