0

pocketlintすべての**/*.jsファイルで実行したい。

.PHONY: lint_js2

LINT_JS = $(wildcard static/js/*.js static/js/**/*.js)
LINT_JS_TARGETS = $(addprefix lint__,$(LINT_JS))

#.PHONY: $(LINT_JS_TARGETS)

lint_js2: $(LINT_JS_TARGETS)
    echo $<

lint__%: %
    pocketlint $<

ただし、次のエラーが表示されます。

make: *** No rule to make target `lint__static/js/ad_list.js', needed by `lint_js2'.  Stop.
  1. lint__static/js/ad_list.jsによってキャプチャされないのはなぜlint__%ですか?
  2. 2 番目にコメントを外す.PHONYと、エコーはしますlint__static/js/ad_list.jsが、起動しませんpocketlint static/js/ad_list.js。なんで?

私のアプローチが間違っている場合、正しいアプローチは何でしょうか? タスクは独立しているので、私make -j50が期待していることをしていただければ幸いです。

ありがとう!

4

1 に答える 1

1

何が意図されているかは明確ではありません:pocketlintという名前のファイルを書き込みますlint__static/js/ad_list.jsか、それとも本当に偽のファイル名ですか? ともかく...

  1. How Patterns Matchの 2 番目の段落を読み直してください。

    ターゲット パターンにスラッシュが含まれていない(通常は含まれていない) 場合、ファイル名のディレクトリ名は、ターゲットのプレフィックスおよびサフィックスと比較される前にファイル名から削除されます。ファイル名をターゲット パターンと比較した後、ディレクトリ名とそれらを終了するスラッシュが、パターン ルールの前提条件パターンとファイル名から生成された前提条件ファイル名に追加されます。

    要するに、%通常、スラッシュを含むパス名ではなく、ファイル名のみに一致します。Solint__static/js/ad_list.jsはキャプチャされません。実際にはad_list.jsと照合されるのは だけだからですlint__%

    からの出力ファイルpocketlintstatic/js/lint__ad_list.jsetc になるように配置できる場合は、これを機能させることができます。

    LINT_JS_TARGETS = $(foreach f,$(LINT_JS),$(dir $f)lint__$(notdir $f))
    
    lint__%: %
        pocketlint $<
    

    %または、ターゲット パターンをパス名 (スラッシュを含む) にすることで、パス名を一致させることができます。

    LINT_JS_TARGETS = $(addprefix linted/,$(LINT_JS))
    
    linted/%: %
        pocketlint $<
    

    今回%=static/js/ad_list.jsはパターンルールに一致します。

    どちらの場合でも、 とはpocketlint異なる名前の出力を生成する必要があります (実際に出力を生成する場合) lint__static/*

  2. 偽のターゲットの場合、暗黙のルール検索は抑制されます (「偽のターゲット」の段落 5 を参照)。そのため、が偽物である場合に関係するルールpocketlintは考慮されません。lint__static/js/ad_list.js

    結果がNo rule to make targetではなくNothing to be done for (phony) である理由は明らかではありませんが、私はそれで眠れなくなることはありません!lint__static/js/ad_list.js lint__static/js/ad_list.js

于 2012-09-04T22:34:44.287 に答える