2015年2月27日金曜日

Fortran 用の Makefile

Fortran 用の Makefile について見なおしてみた。

ポイントは
  1. make のデフォルトルールをできるだけ活用する
  2. mod の依存関係をただしく反映する
の2点。自分がこれまで使ってたのは 2 ができてなくて、モジュールを再コンパイルするとそのモジュールを use しているファイルも再コンパイルしていた(そういうルールを自分で記述していた)。

でも実際はモジュールが再コンパイルされても .mod ファイルが更新されるとは限らない。そのときはそのモジュールを use しているファイルは再コンパイルの必要がないはずだ。

サンプルを示すよ。ターゲット sample は main.o と sub.o をリンクしてて、どちらも Fortran のプログラム。そして main.f90 はモジュール sub を use している。

ポイントは Makefile に記述した %.mod のデフォルトルール。.mod は .f90 と .o に依存するけど作成のためには何もしない。参考リンクでは true にしてるけど Windows だと true 使えなかったりするので : にした。

こうしておくとオブジェクト間の依存関係を Makefile の最後の行のように素直に書くことができる。main.o は sub.mod に依存し sub.o には依存していない。

これで sub.f90 が更新されて sub.o が再作成されても sub.mod に変更がなければ main.o が再コンパイルされることはない。ただし sub.mod のみを削除するのは禁止な。

参考
http://d.hatena.ne.jp/pyridoxin/20110726/1311691190
http://lagrange.mechse.illinois.edu/f90_mod_deps/

0 件のコメント :

コメントを投稿