読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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"の内容をクリア