Makefileを用いたFortran90プログラムのビルド

松本 敏郎(名古屋大学大学院工学研究科機械理工学専攻)

Fortranソースファイルの作成

複数のFortranのソースファイルからなるアプリケーションの作成の例を示す.

以下の3つのソースファイルを適当なエディタで作成し,それぞれmain.f90, data.f90, sub.f90と名前をつけて保存することにする.

main.f90
! メインプログラム
program main
   use data
   implicit none
   real(kind=dp) :: a,b
   
   call sub(pi,a,b)
   
   write(*,'(a,e15.8,2x,a,e15.8)') 'a=',a,'b=',b
   
end program main


sub.f90
! サブルーチン
subroutine sub(x,y,z)
   use data
   implicit none
   real(kind=dp), intent(in) :: x
   real(kind=dp), intent(out) :: y,z
   
   y=x*x
   z=y+x
   
   return
end subroutine sub


data.f90
! モジュールプログラム
module data
   implicit none
   integer, parameter :: dp = selected_real_kind(p=15, r=307)
   real(dp), parameter :: pi=3.14159265358979_dp
end module data


これらのファイルは,MSYSのホームディレクトリ(C:¥msys¥1.0¥home¥(ユーザー名))の中にtestという名前のフォルダを作成し保存しておく.

さらに,次のMakefileを作成して,同じフォルダtestの中に保存する.

Makefile
FC  = gfortran
LD  = gfortran

.SUFFIXES : .f90

TARGET = test

SRC  = data.f90 \
       main.f90 \
       sub.f90
	   
OBJ  = data.o \
       main.o \
       sub.o
	   
all: $(TARGET)

$(TARGET): $(OBJ)
_______$(LD) -o $@ $(OBJ)

.f90.o:
_______$(FC) -c $<
	
clean:
_______rm -f *.o *~ *.mod core


ただし,
_______
の部分はタブ1文字である.
Makefileの作成においては,モジュールの依存関係を考慮してSRCとOBJのファイルリストの順番を書くようにする. この例の場合は,まずモジュールをコンパイルしてdata.modを作成し,これがmain.f90とsub.f90のコンパイルの際に読み込まれるので,上のような順番にしておく必要がある.