LinuxやMacを使っていて,C++やTexのコンパイルをするときにいちいち直接g++やplatexコマンドでコンパイルするのは効率が良いとはいけません.C++はリンクするライブラリを長ったらしく記述しなくてはいけないし,Texは2回コンパイルしなくては図表番号の索引が出来ないなどの煩わしい作業が伴うからです. そこで,コンパイルの手順を記したMakefileを書こうという話になります.しかし,Makefileの記述方法は一歩間違うと,あまり作業が楽にはなりません.ファイル間の依存関係をいちいち直接記述しなくてはいけないからです.私の研究室の友達,後輩もこのMakefileの記述方法に四苦八苦しています. この問題を解決する私なりのMakefileの一例を以下に示してみます.

ポイントは,g++の-MM -MGオプションと,Makefileの中でlsを呼ぶことで,ディレクトリ内の関連ファイルを集めてきていることにあります. 実際に使う際には,各自が必要とするライブラリをLIBS変数に設定することと,name変数を拡張子を除く実行ファイル名,もしくはTex文章ファイル名にすることで利用することが出来ます.また,Texの場合にはepsディレクトリ以下にepsファイルが保存されていることを期待しています.これにより,ほぼどんなプログラム,Tex文章でも再利用することが可能なMakefileが完成します.ただ一つ,注意が必要なのは,C++の場合,main関数を記述したファイルがカレントディレクトリに一つしかないと仮定している点です. 利用手順としては,以下のように実行することで,実行ファイルやdvi,pdf文章が生成されます.C++の場合にはmake dependで依存ファイルが増えた際に実行することで,依存関係を記述したファイル(Makefile.depend)が生成され,適切に依存関係を解決出来ます.また,make runで実行ファイルを実行したり,xdviでプレビューを呼ぶことも可能です.

  • C++
    1. make depend
    2. make
  • Tex
    1. make pdf

以上,Makefile講座を終了します.Makefileの記述のコツは如何にして楽するかだと思います.皆さんもぜひ活用してほしいですし,もっといい方法があれば教えてほしいです.