====== モジュールの依存関係を考慮 ====== モジュールファイルの依存関係を考えて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