Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Makefileの解決順は結局どうなってるのか?

今回のは、もの凄く初歩的な話です。
C言語のような古き善きプロジェクトではよく見かけるMakefile
基本的に人様の書いた秘伝のタレをみて何とな〜くわかった気になってしまうヤツですが
思う所あって、自前で勉強してみようと思いました。
まずは解決順の話。

実際のところ

こんなMakefileがあったとします。

first: 1.txt 2.txt 
	cowsay -d Mooo..

1.txt: hoge.txt
	echo '1'
	touch 2.txt

2.txt: 1.txt
	echo '2'

.PHONY: clean
clean:
	rm -r *.txt

何もターゲットを与えないと、以下のような実行結果になります。

$ make
echo '1'
1
touch 2.txt
echo '2'
2
cowsay -d Mooo..
 ________ 
< Mooo.. >
 -------- 
        \   ^__^
         \  (xx)\_______
            (__)\       )\/\
             U  ||----w |
                ||     ||

解決順としては以下のようになります。
1. 一番上にあるターゲット"first"が処理される
2. 第一条件である、1.txtが無いか見に行く
3. 1.txtの前提状況を見、クリア。2.txtが生成される
4. "first"の第二条件"2.txt"は生成されているので移動
5. "2.txt"の内容をクリア
6. 全てが終了したので、"first"の内容をクリア