Как определить новые задачи 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
запретить смешивать :
а также ::
, Это также запрещает использование -
,