コンパイルのやや高度な仕方

コンパイルオプション・分割コンパイル

主プログラムとサブルーチンを2つファイル(ex120main.fex120sub.f)に保存されているとする。

[galapen@smpc2 ~]$ f77 ex120main.f ex120sub.f
のように2つのファイルを並べて指定してコンパイルしても良い。

もし、ex120_main.fは頻繁に修正するが、ex120_sub.fは全く修正しない場合は、 ex120_sub.fのコンパイルの中間ファイル(オブジェクトファイルという)を予め作成し、その中間ファイルを用いてコンパイルするとコンパイルが早くなる (但し、この程度の簡単なプログラムでは御利益を感じることはない)。
[galapen@smpc2 ~]$ f77 -O -c ex120sub.f
[galapen@smpc2 ~]$ f77 -O -o ex120 ex120main.f ex120sub.o

ここで、 オプション -c は、オブジェクトを作るだけ指示。 -O は最適化し実行 速度を速くするためのオプション、-o 実行ファイル名は、./a.out以外の名前を 指定するオプション。従って、a.outではなくex120という実行ファイルが出来る。
いろんなオプションは、
[galapen@smpc2 ~]$ man f77
で見ることが出来る。

ちなみに
[galapen@smpc2 ~]$ dclfrt ex1.f
f77 -O -w ex1.f -L/usr/local/lib -L/usr/X11R6/lib -ldcl52f77 -lSM
 -lICE -lX11 -lm
のように、dclfrtの実体は、様々なオプションを伴ったf77である。

make

「わざわざ2つのファイルに分けて、コンパイルを数回に分けて行うなんて、面倒だ」と感じるのが普通の人である。今行っている演習では、このようなことをする必要は全くないが、大きなプログラムでは、分割して作成し、コンパイルしなければ、プログラムを作ることはほぼ不可能となる。

ということで、そのようなことをサポートするのが、makeである。予め下にあるファイルMakefileでプログラムの依存性を教えておくと、必要最低限のコンパイルだけを行ってくれて常に最新のソースコードによって実行できるようになる。

Makefileの例 (注意:行の最初が繰り下げる必要がある部分は、空白ではなくタブを使わねばならない このソースをカットアンドペーストで持ってくるとタブが空白に置き換わってしまう)

初めてmakeをする場合
[galapen@smpc2 ~]$ make
f77 -O -c ex120main.f
f77 -O -c ex120sub.f
f77 -O -o ex120 ex120main.o ex120sub.o
ex4_main.fだけを修正してmakeをする場合
[galapen@smpc2 ~]$ make
f77 -O -c ex120main.f
f77 -O -o ex120 ex120main.o ex120sub.o
[galapen@smpc2 ~]$ ./ex120
  AVE =  69.1999969
  SIG =  23.8277149
中間ファイル*.oを消す場合
[galapen@smpc2 ~]$ make clean
rm -f *.o core


2002年度 fortran 演習
担当教官:山中康裕(galapen@ees.hokudai.ac.jp)・豊田威信(toyota@lowtem.hokudai.ac.jp)