SHELL = /bin/sh # FC = gfortran #PROGNAME is the name of the executable, ie. xeq_progname-0_$(FC) PROGNAME = APH3D_PKH3 LIBNAME = APH3D_lib.a # List of Potentials for latter use. POTS = lifhb hpos lsth tmud2 dmbe pkh3 h2oex h2ogr h2odp fh2t5 heh2 lifh # list here all necessary namelist files and their location. This is for backups NAMELISTS = # DIRECTORY FOR DOCUMENTATION DOCDIR= docs # Determine Operating system. SYSTEM = $(shell uname) include Makefile.opt LIBRARY = lib/$(LIBNAME) TIME = $(shell date '+%F') MAINOBJDIR = objs_Programs/$(FC) MAINLOC = $(shell ls Main_Programs) MAINDIR = Main_Programs MAINSRCS = $(MAINLOC:Main_Programs/%=%) MAINBASES = $(basename $(MAINSRCS)) MAINOBJS = $(addsuffix .o, $(MAINBASES)) MAINOLOC = $(MAINOBJS:%=$(MAINOBJDIR)/%) $(MODOBJS:%=$(OBJDIR)/%) # Program specific information for source directories and source files. PROGRAM = $(MAINBASES:Program%=bin/xeq%_$(FC).x) SLOC = $(shell ls src*/*) SRCDIR = $(shell ls -d src*) MODLOC = $(shell ls modules/*) #SRCS = $(SLOC:src*/%=%) SRCS = $(shell ls src*/* | sed -e 's/.*\///') MODSRCS = $(MODLOC:modules/%=%) BASES = $(basename $(SRCS)) MODBASES = $(basename $(MODSRCS)) # 32 BIT MKL LIBS # EXLIBS contains external libraries that are not remade EXLIBS = # LIBS contains libraries that are remade and need recompiled if updated LIBS = lib/PKH3Lib_ifort.a $(LIBRARY) BFILES = $(SRCS:%=$(BACKUP)/%) OBJS = $(addsuffix .o, $(BASES)) MODS = $(addsuffix .mod, $(MODBASES)) MODOBJS = $(addsuffix .o, $(MODBASES)) OLOC = $(OBJS:%=$(OBJDIR)/%) $(MODOBJS:%=$(OBJDIR)/%) # ADD TO VPATH ALL DIRECTORIES CONTAINING SOURCE CODE FOR THIS PROGRAM VPATH = .:$(SRCDIR):modules:$(OBJDIR):backup # Locations of temporary bin (DEST), install, backup, objdir and include directories. #MODULES should be placed in the modules/ directory MODDIR = modules # THE EXECUTABLE WILL BE PLACED IN THE bin/ DIRECTORY DEST = bin INSTDIR = $(HOME)/bin BACKUP = backup # OBJDIR contains all of the object files. The objs/$(FC) dirctory may need created before compiling OBJDIR = objs/$(FC) MODFILEDIR = modfiles INCDIR = PRINT = lpr # Rules for making object files from FORTRAN source %.o : %.f90 $(FC) $(FFLAGS) $(MODFILEDIR) $(DEBUGSTAT) -c $< -o $(OBJDIR)/$*.o %.o : %.f $(FC) $(FFLAGS) $(MODFILEDIR) $(DEBUGSTAT) -c $< -o $(OBJDIR)/$*.o %.o : %.for $(FC) $(FFLAGS) $(MODFILEDIR) $(DEBUGSTAT) -c $< -o $(OBJDIR)/$*.o %.o : %.F $(FC) $(FFLAGS) $(MODFILEDIR) $(DEBUGSTAT) -c $< -o $(OBJDIR)/$*.o bin/xeq_%_$(FC).x : Main_Programs/Program_%.f90 $(LIBRARY) @echo "$<:" @echo " ...compiling" @$(FC) $(FFLAGS) $(MODFILEDIR) $(DEBUGSTAT) -c $< -o $(MAINOBJDIR)/$*.o @echo " ...linking" @$(LD) $(LDFLAGS) $(OLOC) $(LIBS) $(EXLIBS) $(MAINOBJDIR)/$*.o -o $@ all: $(PROGRAM) $(LIBRARY) #Produce the APH3DLIB $(LIBRARY): $(MODOBJS) $(OBJS) @echo produce the library: $(LIBRARY) @ar cru $(LIBRARY) $(OLOC) @ranlib $(LIBRARY) # Delete object and core files. clean:; @echo Removing $(OLOC) core @rm -f $(OLOC) core @rm -f $(DEST)/* core # Delete object, executable, core and tag files. realclean:; @echo Removing ALL Objects, Programs and core files. @rm -f $(OLOC) lib/$(LIBNAME) $(MODFILEDIR)/* $(DEST)/xeq_* core # List source files. echo:; @echo $(SRCS) # Install executable in users bin directory. install: $(PROGRAM) @echo Installing $(PROGRAM) in $(INSTDIR) @-strip $(PROGRAM) @if [ $(INSTDIR) != . ]; then \ (rm -f $(INSTDIR)/$(PROGRAM); $(INSTALL) $(PROGRAM) $(INSTDIR)); fi # Print all source files. print: @$(PRINT) $(HDRS) $(SRCS) # Backup source files before making complicated changes. backup: FORCE @echo Making Backup: @mkdir $(PROGNAME)_$(TIME) @echo " * Backing up src" @cp -r src $(PROGNAME)_$(TIME) @echo " * Backing up lib" @cp -r lib $(PROGNAME)_$(TIME) @echo " * Backing up namelists" @mkdir $(PROGNAME)_$(TIME)/namelists @for i in ${NAMELISTS}; \ do \ (cp -u $$i $(PROGNAME)_$(TIME)/namelists/$$i) \ done @echo " * Backing up docs" @cp -r $(DOCDIR) $(PROGNAME)_$(TIME) @echo " * Backing up Makefiles" @cp Makefile* $(PROGNAME)_$(TIME) @echo making tarfile $(BACKUP)/$(PROGNAME)_$(TIME).tar.bz @tar cjf $(BACKUP)/$(PROGNAME)_$(TIME).tar.bz $(PROGNAME)_$(TIME) @rm -rf $(PROGNAME)_$(TIME) FORCE: # Make Variables. prvar: @echo Variables used in this Makefile @echo FC=$(FC) @echo SHELL=$(SHELL) @echo PROGNAME=$(PROGNAME) @echo POTS=$(POTS) @echo FFLAGS=$(FFLAGS) @echo INCDIR=$(INCDIR) @echo LD=$(LD) @echo LDFLAGS=$(LDFLAGS) @echo DEBUGSTAT=$(DEBUGSTAT) @echo SRCS=$(SRCS) @echo SRCDIR=$(SRCDIR) @echo SLOC=$(SLOC) @echo OLOC=$(OLOC) @echo BASES=$(BASES) @echo MODBASES=$(MODBASES) @echo BFILES=$(BFILES) @echo VPATH=$(VPATH) @echo DEST=$(DEST) @echo OBJS=$(OBJS) @echo MODLOC=$(MODLOC) @echo MODOBJS=$(MODOBJS) @echo MODS=$(MODS) @echo MAINOBJDIR=$(MAINOBJDIR) @echo MAINLOC=$(MAINLOC) @echo MAINDIR=$(MAINDIR) @echo MAINSRCS=$(MAINSRCS) @echo MAINBASES=$(MAINBASES) @echo MAINOBJS=$(MAINOBJS) @echo MAINOLOC=$(MAINOLOC) @echo PROGRAM=$(PROGRAM)