Это продолжение вопросов 231229 , 8855896 и 35234003 : у меня есть ряд служебных модулей в ~ / Fortran / include и я разрабатываю новый код в ~ / Fortran / ProjectA .Моя мечта Makefile увидит, что A.f90 нужно mod_MyMod , и зарегистрируйся в ~ / Fortran / include , чтобы увидеть, если mod_mymod.mod и mod_MyMod.o существуют, в противном случае он сгенерирует и поместит их в include , а затем, после связывания объектов из обоих include и ProjectA он будет производить A в ProjectA
Пока у меня есть это:
FC = gfortran
PROGRAMS = A
FCFLAGS = -I../include
LDFLAGS = -lm -L/usr/local/lib
# flags forall (e.g. look for system .mod files, required in gfortran)
# "make" builds all
all: $(PROGRAMS)
# Using Fortran MODULES:
A.o: ../include/mod_MyMod.o
A: ../include/mod_MyMod.o
# Linking
%: %.o
$(FC) -o $@ $^ $(LDFLAGS)
# Compiling (fortran)
%.o: %.f90
$(FC) $(FCFLAGS) -c $<
# Utility targets
clean:
rm -f *.o *.mod
в ProjectA / У меня есть
Program A
use, intrinsic :: iso_fortran_env, only: R64 => real64,I32 => int32,&
& input_unit,output_unit,error_unit
use mod_MyMod
implicit none
! global variables
character(len=23) :: string="This is A speaking"
call Print_This(string)
End Program A
в include / У меня есть
Module mod_MyMod
use, intrinsic :: iso_fortran_env, only: R64 => real64,I32 => int32,&
& input_unit,output_unit,error_unit
implicit none
contains
Subroutine Print_This(string)
character(len=20),intent(in) :: string
write(output_unit,"(*(g0,:,' '))")string
End Subroutine Print_This
End Module mod_MyMod
Чтобы выполнить то, что я хочу, я думаю, что мне нужно отдельноправила компиляции A.f90 и mod_MyMod.f90 .В первом случае объект указывает на локальный каталог, во втором должны быть помещены .mod и .o в include .