################################ ##### makefile definitions ##### ################################ include Makefile.inc # global source files directory SRC_DIR := ./ # binary files directory BIN_DIR := bin # local source files directory SRC_DIRS := $(shell find $(SRC_DIR) -type d) # main source, object, and executable files MAIN_SRC := working_ex MAIN_OBJ := $(foreach program,$(MAIN_SRC),$(program).o) MAIN_OBJ_FINAL := $(patsubst %.o,$(BIN_DIR)/%.o,$(MAIN_OBJ)) MAIN_EXE := main # initialize c preprocessor flags CPPFLAGS := -cpp # set fortran compiler/linker ifeq ($(compile_link),1) FC := gfortran FL := gfortran else ifeq ($(compile_link),2) FC := $(MPIDIR)/bin/mpif90 FL := $(MPIDIR)/bin/mpif90 else ifeq ($(compile_link),3) FC := $(TACC_IMPI_BIN)/mpiifort FL := $(TACC_IMPI_BIN)/mpiifort endif # set gfortran-specific compiler flags # for info on -march=native, run `gcc -march=native -v -Q --help=target` ifeq ($(compile_link),2) FFLAGS := -g -fopenmp else ifeq ($(compile_link),3) FFLAGS := -O0 -g -debug -mkl=cluster -recursive endif # terminal commands RM := /bin/rm -f ############################# ##### makefile commands ##### ############################# # define targets .PHONY: clean new all: main_1 main_2 main: main_1 main_2 clean: clean1 new: clean main print-%: ; @echo $* = $($*) main_1: $(MAIN_OBJ) main_2: @echo Linking to executable "'$(MAIN_EXE)'" @$(FL) $(FFLAGS) $(MAIN_OBJ_FINAL) $(LCOMBINE) -o $(MAIN_EXE) %.o : %.f90 @echo Compiling $< @$(FC) $(FFLAGS) $(ICOMBINE) -c $< -o $(BIN_DIR)/$@ clean1: @echo Cleaning binaries @$(RM) -r $(BIN_DIR)/* debug: @echo $(MAIN_OBJ_FINAL) @echo $(CPPFLAGS) @echo $(FFLAGS) @echo $(FC) @echo $(ICOMBINE)