make のすすめ


プログラムが複数になると、コンパイルの自動化をしたくなります。 例えば、あるファイルを書き換えた際、 どのファイルを再コンパイルする必要があるか、勝手に判断してくれるとうれしいです。 そんな期待にこたえてくれるのが makefile です。 例えば、先のでは、こんなMakefile を 書くことになります。
decl_func: decl_func0.o decl_func3.o
	gcc -o decl_func decl_func0.o decl_func3.o

decl_func0.o: decl_func0.c

decl_func3.o: decl_func3.c decl_func0.h

clean:
	rm *.o
で、例えば、
kamada@cygwin% make
とすると、自動的に compile が行われます。 make file 中のルールは、
ゴール: 依存ファイル
	(タブの後に)実行コマンド
と書かれています。

最初のゴール: decl_func は、decl_func0.o, decl_func0.o, decl_func0.h のいずれかが再コンパイルする必要が あれば、その再コンパイルを行った後、2 行目のコマンド(リンク操作)を行う という意味です。 で、例えば decl_func3.o の再コンパイルは、decl_func3.c か decl_func0.h が 書き換えられた際におこなわれることになります。 この際、実施コマンドが書かれていませんが、省略された場合、 XXX.o は、gcc $(CFLAGS) -c XXX.cで作成されると決められています。 というわけで、皆さんは依存関係だけ書いておけば、 書き換えたファイルに応じた再コンパイルを行ってくれることになります。 $(CFLAGS) のところは、ユーザが

CFLAGS = -Wall
などと書いておくとそれが利用されることになります。

make は結構奥が深いので、詳しいことは参考書などを見てください。


2001.10.29/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp