2

私は美しいLinuxツールを使って学んでいます:make。そして、私が理解したいことがあります:

この簡単な例を見てみましょう。

JADE = $(shell find pages/*.jade)
HTML = $(JADE:.jade=.html)

all: $(HTML)

%.html: %.jade
    jade < $< --path $< > $@

clean:
    rm -f $(HTML)

.PHONY: clean

を実行するwatch makeと、出力文字列があまり理解できません。make:`all'とは何の関係もありません。

質問:

  1. すべてのアクションは何をしますか?
  2. すべてのアクションはウォッチツールで何かをしますか?
4

1 に答える 1

4

allターゲットは、実際には、提示したmakefileのデフォルトのターゲットにすぎません。ファイルの最初のターゲットはデフォルトのターゲットでありmake、ターゲットを指定せずに実行すると構築されます。

makeがallターゲットをビルドするときに行う作業がないことを通知する場合、すべての依存関係が以前にビルドされており、最新であることを意味します(つまり、最後にビルドしてから依存関係が変更されていない)。あなたの場合、それはHTML出力ファイルが対応するJade入力ファイルよりも新しいことを意味します。したがって、makeが行うことは何もありません。

ユーティリティはwatch、コマンドを繰り返し実行して、出力が時間の経過とともにどのように変化するかを監視します。ウォッチはmake非常に多くの秒ごとに実行され、出力を表示します。初めて実行すると、すべてがビルドされ、その後のmakebyの呼び出しはすべて、watchすべてが最新であると表示されます。したがって、任意の時点でファイルを変更するものがあり、それらを再構築して対応したい場合を除いて、make内で実行することは実際にはそれほど有用ではないようですが、それはやや不自然な例のようです。watch

于 2012-04-29T10:34:57.833 に答える