Here I have two Fortran90 files and a makefile:
Contents of file main_mod.f90:
module main_mod
contains
subroutine add(a, b)
implicit none
integer, intent(in) :: a, b
print *, (a+b)
end subroutine add
end module main_mod
contents of file main_mod2.f90
module main_mod2
use main_mod
contains
subroutine add2(a, b)
implicit none
integer, intent(in) :: a, b
call add(a, b)
end subroutine add2
end module main_mod2
and in makefile, I automatically generate a list of ".o" files from current directory:
F90 = /usr/bin/gfortran
COMPFLAGS = -c
%.o: %.f90
$(F90) $(COMPFLAGS) $*.f90
all: $(patsubst %.f90,%.o,$(wildcard *.f90))
when I make the project, the wildcard statement in my make file generates a list of object files like:
main_mod2.o main_mod.o
and then the compilation fails because first, the file main_mod.f90 needs be compiled which would give us main_mod.o and main_mod.mod used in main_mod2.f90. Then main_mod2.f90 would be compiled successfully. That means the permutation of object files must be:
main_mod.o main_mod2.o
Now, the question is, in general case when I create the list of object files using wildcard, how can I enforce correct permutation of object files?