Tutaj mam dwa pliki Fortran90 i makefile:Automatyczne Zamawianie Obejct plików "* .o" w Fortran Makefile
zawartość plikumain_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
zawartość plikumain_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
aw makefile, automatycznie generuje listę „.o” plików z bieżącego katalogu:
F90 = /usr/bin/gfortran
COMPFLAGS = -c
%.o: %.f90
$(F90) $(COMPFLAGS) $*.f90
all: $(patsubst %.f90,%.o,$(wildcard *.f90))
kiedy robię projektu, wieloznaczny oświadczenie w moim pliku make generuje listę plików obiektowych jak :
main_mod2.o main_mod.o
a następnie kompilacja się nie powiedzie, ponieważ po pierwsze, plik main_mod.f90 potrzeby zostać skompilowany, które dałyby nam main_mod.o i main_mod.mod używany w main_mod2.f90. Następnie main_mod2.f90 zostanie skompilowany pomyślnie. Oznacza to, że permutacja plików obiektowych musi być:
main_mod.o main_mod2.o
Teraz pytanie jest, w ogólnym przypadku, gdy tworzę listę plików obiektowych z wykorzystaniem wieloznaczny, w jaki sposób można egzekwować prawidłowe permutacji plików obiektowych?
W tym przypadku kod w 'main_mod2' używa kodu w' main_mod'. W ogólnym przypadku, * jak w piekle może Zgadnij, który kod używa? * – Beta
@Beta "jak do cholery Czy zgadnij, który kod używa?" - masz rację!!! Ale popatrz na wybitną odpowiedź Yossariana, aby coś takiego zrobić !!! – argasm