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