いままでもっぱらCでのコンパイルにmakeを使ってみましたが、他の言語(以外)にも利用できます。
分割コンパイルという観点ではCもFortranも変りありません。 違いはFortranコンパイラやオプションの指定の仕方だけです。
例として、main.f、runge.f、input.f、output.fというソースファイルがあって「gfortran を使って、オプション-Wallをつけて、-lm をつけて」コンパイルしたいとします。 生成される実行ファイルの名前はmainにします。 そのときのMakefileは
FC = gfortran
FFLAGS = -Wall
LDLIBS = -lm
OBJS = main.o runge.o input.o output.o
main: $(OBJS)
となります。 main.oを作るために、makeはソースファイルを探し、main.fを見付けて、サフィックス.fによりFortranでのコンパイルを試みるのです。
もし、main.fの他にmain.cがあったとします。 このとき、makeはmain.cをmain.oのソースと判断します。 サフィックスには優先順位があって、Cのソースの方がFortranのよりも優先されるのです。
makeは、lexとyaccの存在も知っています。 .lで終わるファイルがlexのソースで、.yで終わるのがyaccのソースです。 これらからどうやってCのコードを作るかなども知っているので、プログラマはオブジェクトを指定するだけで構いません。
例えば、main.cとinput.lという2つのファイルからなる場合、
main: main.o input.o
と書くだけです。
TeXやLaTeXはUNIX上のdefact standardなドキュメント書き用のソフトです。 いずれも、長いドキュメントは複数のファイルに分割することが可能になっています。 一部を変更すれば全体をコンパイルしなければならないのですが、そこにmakeが使えます。
main.texにchap1.tex, chap2.tex, chap3.tex, chap4.texを読みこんでコンパイルするように書いてあったとしましょう。こんなときのMakefileは
main.dvi: main.tex chap1.tex chap2.tex chap3.tex chap4.tex
の一行です。 main.dviは、TeXによって生成されるターゲットです。 実行してみます。
$ make
tex main.tex
This is TeX, Version 3.14159 (C version 6.1)
(main.tex
Babel <v3.6h> and hyphenation patterns for american, german, loaded.
(chap1.tex) (chap2.tex) (chap3.tex) (chap4.tex) [1] )
Output written on main.dvi (1 page, 264 bytes).
Transcript written on main.log.
$
うまく動いていますね。
この例ではTeXのコンパイラはtexでしたが、もちろんlatexやplatexなどを指定できます。 Makefileに
TEX = latex
main.dvi: main.tex chap1.tex chap2.tex chap3.tex chap4.tex
などと書いてやればよいのです。
自分でドキュメントを書く際には、LaTeXに関してはEmacsでAUCTeXを利用するほうが効率が良いと思います。 ドキュメントを配付するときに自動的にdviを生成できるようにするのが、LaTeXでのmakeの主たる利用方法でしょう。
makeの知っている言語は他にもありますが、makeが知らない言語でも、言語でなくても、
ターゲット: ソース
コマンド
のパターンにはまるものなら、なんでもmakeが利用できます。 あとは工夫しだいですね。