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