make
Make と Makefile の説明の最初の例でつまづいた。
〜 Makefile の例 (1) 愚直バージョン 〜
# Makefile 1 (「#」は行末までのコメント) a.out: sub1.o sub2.o # ターゲット a.out の依存ファイルは sub1.o, sub2.o cc -o a.out sub1.o sub2.o # a.out の生成コマンド sub1.o: sub1.c # sub1.o の依存ファイルは sub1.c cc -c sub1.c # sub1.o の生成コマンド sub2.o: sub2.c # sub2.o の依存ファイルは sub2.c cc -c sub2.c # sub2.o の生成コマンド # header.h はコンパイル時に include されるので、実際には何もしなくてよい sub1.c: header.h # sub1.c の依存ファイルは header.h sub2.c: header.h # sub2.c の依存ファイルは header.h上の例で、header.h は sub1.c, sub2.c 中に #include されているので、最後の sub1.c と sub2.c のための規則は、実際には何も行わない。これらの規則は header.h を修正したときのためにある。こうしておくと、make は header.h の更新をチェックすることで sub1.c や sub2.c も更新されたとみなし、sub1.c と sub2.c を自動的にコンパイルしなおしてくれる。
コンパイルしなおして欲しかったんだけど、してくれなかった。
実際の挙動が再コンパイルしないってことは、それが正しい動作なんだろうなぁ。
やっぱり*.oが*.hに依存することを直に書くしかないのか。
Gnu Makeの本でも読むか。オンラインでもあったと思うけど、どうも本の方がなじむ。
関数型言語 makeも。
あと、makeの-dオプションはいいなと思った。根性があれば、これで勉強できるだけのログ吐いてくれる。根性ないけど。