2

生成された Makefile に、次のような lint 用の新しいタスクを追加したいと考えています。

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にも投稿されています。

4

2 に答える 2

4

ブリアンフォイに感謝:

$ 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
}
于 2014-02-12T19:51:50.167 に答える
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:::-

于 2018-09-09T16:23:08.950 に答える