Dear All
Excuse me if my question is not directly about Fortran.
I want to compile and link my Fortran files using a makefile.
The Fortran source files are in a sub-folder and I want the object files are made in another sub-folder while the executable file is made in the root folder. For example the source files are in ./src, the object files in ./debug.
I can generate a make file (using a perl script) that compile the sources and link them while all the files are in a folder but I could not change it to do the above task. In the present way all the files are mixed in a folder but i want to have only executable file and my input and output files in the root folder.
Thanks in advance,
Hadian
My makefile for a project including 3 files is as follows:
==== makefile ======
PROG = a.out
SRCS = main.f90 setarray.f90 vardef.f90
OBJS = main.o setarray.o vardef.o
LIBS =
FC = gfortran
FFLAGS = -O
F90 = gfortran
F90FLAGS = -O
LDFLAGS = -s
all: $(PROG)
$(PROG): $(OBJS)
$(F90) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
clean:
rm -f $(PROG) $(OBJS) *.mod
.SUFFIXES: $(SUFFIXES) .f90
.f90.o:
$(F90) $(F90FLAGS) -c $<
main.o: vardef.o
setarray.o: vardef.o
==== main.f90 ======
program test
use VarDef
implicit none
integer :: i
Print *, "input array dimension:"
read *,n
call SetArray
a=(/(2*i,i=1,n)/)
print * ,a
end program
==== setarray.f90 ======
subroutine SetArray
use VarDef
implicit none
allocate(a(n))
end subroutine SetArray
==== vardef.f90 ======
module VarDef
implicit none
integer,allocatable,dimension(:)::a
integer::n
end module VarDef