ユーザ用ツール

サイト用ツール


サイドバー

fortran:makefile

モジュールの依存関係を考慮

モジュールファイルの依存関係を考えてMakeする方法.

  • OBJの順番は,依存関係の子どもから親に向かって書く.(mainのプログラム見て依存関係吐き出したい場合は他の方法で.Pythonのスクリプトが落ちている.)
  • use文で外部ライブラリを取り込むときは,sedかなんかで対応する.
  • use omp_lib と書いても,無視してくれる.さすがgfortran.
  • .modにtouchするのは.modが更新されないときに,タイムスタンプを更新するため.
#Makefile considering module dependency
F90=gfortran
FFLAGS=-fopenmp
TARGET=a.out
DEPS=deps.d
 
.SUFFIXES :
.SUFFIXES : .o .f90 .mod
.f90.o:
	${F90} -c $< ${FFLAGS}
.f90.mod:
	touch $@
 
OBJ= modc.o modb.o moda.o main.o
SRC=$(OBJ:.o=.f90)
.PHONY:all
 
all:${DEPS} ${TARGET}
 
${TARGET}:${OBJ}
	${F90} $^ ${FFLAGS}
 
${DEPS}:${SRC}
	gfortran -cpp -MM $^ > $@
#	sed -i -e 's/pardiso\.mod//g' $@
 
-include ${DEPS}
 
.PHONY:clean
clean:
	rm -rf *.o *.mod *.f90~

OSで使い分け

linux環境とosx環境で使い分ける.

  • DropboxやマルチOS環境での利用を想定.
  • ifortだとmklをFFLAGSに入れましょう.
UNAME := $(shell uname)
ifeq ($(UNAME), Linux)
	F90 = gfortran
	FFLAGS+=-llapack
else ifeq ($(UNAME), Darwin)
	F90 = gfortran
	FFLAGS+=-framework Accelerate
else
	$(error uname is not Linux nor Darwin)
endif
fortran/makefile.txt · 最終更新: 2017/10/03 12:55 (外部編集)