Могу ли я собирать модули Perl с помощью системы сборки на основе ExtUtils :: MakeMaker "из дерева"? - PullRequest
2 голосов
/ 12 августа 2011

Вместо добавления или изменения файлов в каталоге, куда распаковываются исходные коды модуля Perl, я хотел бы собрать все в отдельном каталоге.Это легко достижимо с довольно стандартным Makefile.PL, который использует ExtUtils::MakeMaker?(Под легким я подразумеваю что-то вроде одного или нескольких параметров командной строки.) Если нет, поддерживает ли какая-либо из других систем сборки это?

Обновление / Причина: Модуль Perlпривязка к библиотеке, чья система сборки основана на autoconf / automake / libtool.Модуль Perl поставляется вместе с этой библиотекой, и вызов make в верхнем каталоге в конечном итоге также создает библиотеку Perl.Я заинтересован в построении всего проекта в отдельном дереве сборки.На данный момент я делаю что-то похожее на то, что предложил Рунриг, только используя символические ссылки.(cp -sru $(srcdir)/. $(builddir)/.).До сих пор это работало, но если есть более элегантное решение, я бы хотел прочитать об этом.

Ответы [ 3 ]

2 голосов
/ 14 августа 2011

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'
},

См. "Определение библиотек Perl и мест установки" в документах ExtUtils :: MakeMaker для получения дополнительной информации.

1 голос
/ 12 августа 2011
cp -R Module-Directory-0.01 Module-Directory-0.01.copy
cd Module-Directory-0.01.copy
perl Makefile.PL
make
make test
...etc.
0 голосов
/ 15 августа 2011

Я использовал символические ссылки:

Библиотека, к которой модуль 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 не приводит к изменению файлов на месте.

...