make 前:ちょっとした応用 後:サフィックスルール

makeの第一歩: C以外にmakeを使う

いままでもっぱらCでのコンパイルにmakeを使ってみましたが、他の言語(以外)にも利用できます。


Fortran

分割コンパイルという観点では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のよりも優先されるのです。


Lex & Yacc

makeは、lexとyaccの存在も知っています。 .lで終わるファイルがlexのソースで、.yで終わるのがyaccのソースです。 これらからどうやってCのコードを作るかなども知っているので、プログラマはオブジェクトを指定するだけで構いません。

例えば、main.cとinput.lという2つのファイルからなる場合、

        main: main.o input.o 
と書くだけです。

TeX & LaTeX

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が利用できます。 あとは工夫しだいですね。


make 前:ちょっとした応用 後:サフィックスルール
小栗栖 修
メールアドレス: ogurisu[AT]kanazawa-u.ac.jp ([AT]を@におきかえてください)