Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Can you read the following makefile?

lee__seungcheol
Beginner
992 Views

I have the following makefile, its name is release.makefile

I executed the file by 'make -f release.makefile' in terminal of mac.

However, I only see Parameters.o Globals.o umfpack.o Procedures.o and can't see  AllocateArrays.o SetParameters.o Grids.o ... (object files of subroutine)

 

FC = ifort
FCFLAGS = -m64 -traceback -O3 -qopenmp -implicitnone  -Wl,-stack_size,0x100000000 -L/Volumes/FILES/Projects/Fortran/SuiteSparse/lib -lumfpack -lamd -lcholmod -lcolamd -lsuitesparseconfig -lblas 
LDFLAFS = -m64 -traceback -O3 -qopenmp -implicitnone  -Wl,-stack_size,0x100000000 -L/Volumes/FILES/Projects/Fortran/SuiteSparse/lib -lumfpack -lamd -lcholmod -lcolamd -lsuitesparseconfig -lblas 
# -O3

PROG = $(OUT)

MOD = Parameters.o Globals.o umfpack.o Procedures.o 

SUBR =     AllocateArrays.o SetParameters.o Grids.o IterateBellman.o HJBUpdate.o cumnor.o rtsec.o StationaryDistribution.o SaveSteadyStateOutput.o DistributionStatistics.o rtbis.o rtflsp.o InitialSteadyState.o FinalSteadyState.o SolveSteadyStateEqum.o Calibration.o MomentConditions.o dfovec.o newuoa-h.o newuob-h.o update.o trsapp-h.o biglag.o bigden.o mnbrak.o golden.o sort2.o  CumulativeConsumption.o  FnDiscountRate.o  OptimalConsumption.o FnHoursBC.o  ImpulseResponses.o IRFSequence.o Transition.o  SaveIRFOutput.o IterateTransitionStickyRb.o IterateTransOneAssetStickyRb.o FnCapitalEquity.o CumulativeConsTransition.o DiscountedMPC.o DiscountedMPCTransition.o


OBJ = $(MOD) $(SUBR)

$(PROG).out: $(OBJ) Main.o
    $(FC) $(FCFLAGS) -o $@ $^ $(LDFLAGS)
Main.o: $(MOD)

%: %.o
    $(FC) $(FCFLAGS) -o $@ $^ $(LDFLAGS)

%.o: %.f90
    $(FC) $(FCFLAGS) -c $<

================================================

 

Furthermore, when I execute ifort Main.f90,

I encounter the following error, 

===============================================

Undefined symbols for architecture x86_64:

  "_calibration_", referenced from:

      _MAIN__ in ifort3mKuPv.o

  "_finalsteadystate_", referenced from:

      _MAIN__ in ifort3mKuPv.o

  "_globals_mp_calibratecostfunction_", referenced from:

      _MAIN__ in ifort3mKuPv.o

  "_globals_mp_doimpulseresponses_", referenced from:

      _MAIN__ in ifort3mKuPv.o

  "_impulseresponses_", referenced from:

      _MAIN__ in ifort3mKuPv.o

  "_initialsteadystate_", referenced from:

      _MAIN__ in ifort3mKuPv.o

  "_savesteadystateoutput_", referenced from:

      _MAIN__ in ifort3mKuPv.o

  "_setparameters_", referenced from:

      _MAIN__ in ifort3mKuPv.o

============================================

Do you have any idea?

Thank you so much in advance.

Best,

Seungcheol

0 Kudos
4 Replies
mecej4
Honored Contributor III
992 Views

OUT is not defined. Because of that, PROG is not defined, and the default target is .out . LDFLAGS has been incorrectly typed as LDFLAFS.

0 Kudos
lee__seungcheol
Beginner
992 Views

Hi mecej4,

Thank you for your comment. It's really helpful!!

Can you help me a little bit more? I don't have any knowledge of Fortran, so, I don't know how to define OUT.

Can you give me a just easy example? or can you suggest a quick correction in this file?

I look forward to your reply.

Best,

Seungcheol

0 Kudos
mecej4
Honored Contributor III
992 Views

The issue has next to nothing to do with Fortran.

You appear to have an incomplete or modified makefile. If you do not know how to modify makefiles, do not do so. Take the original makefile and use it.

You could try fixing the error in the the makefile and then running make using the command make OUT=Main.out . If that works, the resulting executable will be Main.out.

0 Kudos
TimP
Honored Contributor III
992 Views

Some of those libraries would be covered by -mkl . Libraries built with gfortran which may be available on your system will not work with ifort.

0 Kudos
Reply