Вопрос по makemaker, perl, structure, project – Как начать новый дистрибутив модуля Perl?

8

Я пытаюсь создать большой проект, написанный на Perl.Учебное пособие по IBM MakeMaker до сих пор был очень полезным, но я неНе понимаю, как связать все модули в основную программу. В моем проекте root, у меня есть,MANIFESTMakefile.PLREADME,bin каталог иlib каталог. В моемbin каталог, у меня есть основной сценарий (Main.pl). вlib каталог, у меня есть каждый из моих модулей, разделенных на свои соответствующие каталоги (т.е.Utils::Util1 а такжеUtils::Utils2 вutils каталог и т. д.). В каждом каталоге модуля также естьt каталог, содержащий тесты

мойMANIFEST Файл имеет следующее:

bin/Main.pl
lib/Utils/Util1.pm
lib/Utils/Util2.pm
lib/Utils/t/Utils1.t
lib/Utils/t/Utils2.t
Makefile.PL
MANIFEST
README

Makefile.PL является следующим:

use ExtUtils::MakeMaker;
WriteMakefile(
    'NAME'=>'Foo',
    'VERSION_FROM'=>'bin/Main.pl',
    'PREREQ_PM'=>{
    "XML::Simple"=> 2.18}, #The libraries that we need and their
                   #minimum version numbers
    'EXE_FILES' =>[("bin/Main.pl")]
);

После того, как я сделал и запустил, программа вылетает, жалуясь, что не может найтиUtils::Util1и когда я бегуmake testэто говоритno tests defined, Кто-нибудь может сделать какие-либо предложения? Я никогда не делал такого масштабного проекта на Perl, и мне нужно будет добавить еще много модулей.

Я надеюсь на тебя, что "Utils :: Util1" а также "Utils :: Util2" это просто примеры имен. innaM
Это просто примеры имен. У меня нетЯ написал все модули, пока яМне понадобится, но я хотел иметь возможность что-то построить. Tim

Ваш Ответ

4   ответа
2

По умолчанию тесты ищутся в каталоге t верхнего уровня (или в файле test.pl, но у него есть некоторые ограничения, поэтому его следует избегать).

Ты говоришь "После того, как я сделаю и бегу... make помещает вещи в структуру каталогов blib, готовую к установке, но нене делайте ничего особенного, чтобы запускать скрипт к ним. (make test особенный; он добавляет подходящие пути из blib в perl 's @INC, чтобы иметь возможность запускать тесты.) Вам нужно будет сделать "сделать установку " установить модули, где ваш скрипт их найдет (или использовать такой инструмент, как PAR, чтобы упаковать их вместе со своим скриптом).

5

Попробуйте эту структуру:

bin/Main.pl
lib/Utils/Util1.pm
lib/Utils/Util2.pm
Makefile.PL
MANIFEST
README
t/Utils1.t
t/Utils2.t

Как говорилось,make не устанавливает ваши модули, он просто собирает их вblib каталог. (В вашем случае он просто копирует их туда, но если бы у вас был код XS, он был бы скомпилирован с помощью компилятора C.) Использованиеmake install установить ваши модули для использования обычных скриптов.

Если вы хотите запустить свой скрипт междуmake а такжеmake install, ты можешь сделать:

perl -Mblib bin/Main.pl

-Mblib указывает perl временно добавить соответствующие каталоги в путь поиска, чтобы вы могли опробовать удаленный модуль. (make test делает это автоматически.)

9

Могу ли я также предложитьmodule-starter? Это'Я буду автоматически создавать каркасный проект, который "Просто работает ", То, что я мало знаю об организации модулей Perl, я узнал, прочитав созданные файлы скелетов. Это'Все они хорошо документированы и довольно просты в использовании в качестве основы для роста крупного проекта. Вы можете проверитьначинающие документы чтобы увидеть, что это дает вам.

Бегmodule-starter даст вам дистрибутив Perl, состоящий из нескольких модулей (используйте опцию командной строки--module, такие как:

module-starter --distro=Project --module=Project::Module::A,Project::Module::B [...]

создать несколько модулей в одном дистрибутиве). Это'а потом решать вамПредпочитаю организовать ваш проект как единый дистрибутив, состоящий из нескольких совместно работающих модулей, или как ряд дистрибутивов, которые могут быть выпущены отдельно, но которые зависят друг от друга (как настроеноBuild или жеMakefile.PL файл), чтобы обеспечить полную систему.

Благодарю. Я прочитал это и не могничего о работе над проектами, только о создании модулей Tim
Это похоже на действительно хорошую идею, и яЯ буду использовать его для моего следующего проекта. Я уже создал проект makemaker, но это отвечает на мой вопрос намного лучше, чем ваш первый пост Tim
Тим: яМы изменили мой ответ, чтобы уточнить, как дистрибутивы и модули могут работать вместе в Perl. Надеюсь, поможет? Пожалуйста, измените ваш вопрос или ответьте снова, если кто-то из нас все еще в замешательстве :). Gaurav
13

Если вы только начинаете создавать модули Perl (который также является Perl 'эквивалент проекта), нет использовать Makemaker.Модуль :: Строить это путь, и этоТеперь часть стандартной библиотеки. Makemaker для нас старые соли, которые не имеютT преобразован в Module :: Build еще. :) яЯ ударю это сейчасМодуль :: Строить не поддерживается и не пользуется услугами; Я все еще использую MakeMaker.

Вы никогда не должны начинать проект Perl, пытаясь создать структуру самостоятельно. Это'слишком много работы и тыЯ всегда что-то забуду.

Там вh2xsпрограмма, которая поставляется сperl и должен был стать инструментом для конвертации.час файлы в Perlс языком клея XS. Он работает нормально, но его преимущество в том, что он поставляется с:perl

% h2xs -AXn Module::Name

Что-то вродеModule :: Starter немного сложнее, хотя вы должны получить его от CPAN. Это'инструмент, который мы используем вСредний Perl потому что это'все просто. Он заполняет некоторые шаблоны вашей информацией:

% module-starter --author=... --email=... --module=...

Если вы делаете это совсем немного, вы можете преобразовать это вРаспределение :: Плита так что вы можете настроить свои файлы и содержимое. Это'Это полезная утилита, которую я написал для себя, чтобы я мог использовать свои собственные шаблоны.

% dist_cooker Module::Name

Если ты'действительно твердое ядро, вы можете захотетьDist :: Zilla, но это'больше для людей, которые уже знают, что они делают.

Похожие вопросы