我希望我生成的Makefile能够完成linting的这些新任务:
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。
答案 0 :(得分:4)
感谢briandfoy:
$ 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
}
答案 1 :(得分:1)
一种可行且易于维护的解决方案是将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
禁止混用:
和{{1 }}。它还不允许使用::
。