Как определить новые задачи make, используя `Makefile.PL`?

Я хотел бы, чтобы у моего сгенерированного Makefile были следующие новые задачи для линтинга:

perl:
    -for f in **/*.pl; do perl -MO=Lint -cw $$f 2>&1 | grep -v "syntax OK"; done
    -for f in **/*.pm; do perl -MO=Lint -cw $$f 2>&1 | grep -v "syntax OK"; done

perlcritic:
    -perlcritic . | grep -v "source OK"

lint: perl perlcritic

Я пытался написать Makefile.PL, но когда я запускаю его, полученный Makefile по-прежнему не хватает lint задача.

use ExtUtils::MakeMaker;

sub MY::lint {
  return <<'END';
lint:
    echo "Linting!!!!!!!!!!!1"

END
}

WriteMakefile;

Я пытался читать документы CPAN, но, как и большинство документов, они дают фрагменты без достаточного контекста, поэтому я даже не уверен, должен ли я объявить подводные лодки до или после WriteMakefile,

Также размещено на Reddit.

2 ответа

Благодаря бриандфой:

$ cat Makefile.PL 
#!/usr/bin/env perl

use strict;
use warnings;
use ExtUtils::MakeMaker;

WriteMakefile;

sub MY::postamble {
  return <<'END';
perlwarn:
    -find . -type f -name '*.pl' -exec perl -MO=Lint -cw {} 2>&1 \; | grep -v "syntax OK" | grep -v "Can't locate"
    -find . -type f -name '*.pm' -exec perl -MO=Lint -cw {} 2>&1 \; | grep -v "syntax OK" | grep -v "Can't locate"
    -find . -type f -name '*.t' -exec perl -MO=Lint -cw {} 2>&1 \; | grep -v "syntax OK" | grep -v "Can't locate"

perlcritic:
    -perlcritic . | grep -v "source OK"

lint: perlwarn perlcritic
END
}

Решение, которое работает и его немного легче поддерживать, состоит в том, чтобы поместить цели make в отдельный makefile, так что вы можете воспользоваться возможностями вашего текстового редактора, и его немного легче читать:

# In Makefile.PL
use File::Slurp;

sub MY::postamble {
    my $targets = read_file('./script/additional.make');
    return $targets;
}

# In /script/additional.make
perl:
    for f in **/*.pl; do perl -MO=Lint -cw $$f 2>&1 | grep -v "syntax OK"; done
    for f in **/*.pm; do perl -MO=Lint -cw $$f 2>&1 | grep -v "syntax OK"; done

perlcritic:
    perlcritic . | grep -v "source OK"

lint: perl perlcritic

Примечание для более поздних читателей: я использую Module::Install и надо было использовать :: в качестве разделителей, потому что кажется, что Module::Install запретить смешивать : а также ::, Это также запрещает использование -,

Другие вопросы по тегам