2012-04-29 7 views
1

私は美しいLinuxツールを使って学んでいます。Makefileのすべてのターゲット

はのは、この単純な例を見てみましょう:

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

all: $(HTML) 

%.html: %.jade 
    jade < $< --path $< > [email protected] 

clean: 
    rm -f $(HTML) 

.PHONY: clean 

私はwatch makeを実行すると、私は本当に多くの出力文字列を理解していません:作る:何もすることと、私は理解したい何かがあります`all 'と一緒に。

質問:

  1. すべてのアクションは何をしますか?
  2. すべてのアクションが時計ツールで何かしますか?

答えて

2

allターゲットは、実際に提示したメイクファイルのデフォルトターゲットです。ファイル内の最初のターゲットはデフォルトターゲットです。ターゲットを指定せずにmakeを実行するとビルドされます。

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

ユーティリティwatchは、時間の経過とともに出力がどのように変化するかを監視するコマンドを繰り返し実行します。時計はちょうどmake秒ごとに実行し、出力を表示します。初めて実行されたときにはすべてが構築され、その後のすべての呼び出しでmakewatchになると、すべてが最新であると表示されます。だから、makewatchの範囲で実行するのは便利ではないようですが、任意の時点でファイルを変更して再構築して反応したいのでなければ、それはやや工夫した例のようです。

+0

私の場合、メイクファイルはコーヒー、スタイラス、ヒスイをコンパイルする作業をするので、これは問題ありません。あなたの偉大な答えをありがとう – nXqd

+0

'all:$(HTML)$(JS)$(CSS)' – nXqd

+1

など、複数の変数としてすべてのターゲットを指定できますか?あなたがこれらのことを最初に試してみて、あなたが試したこととうまくいかなかったことを尋ねただけでは、もっと有益な経験になるでしょう。あなたは長期的にもっと利益を得るでしょう。 –

関連する問題