这里我有两个Fortran90文件和一个makefile:
文件 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
Run Code Online (Sandbox Code Playgroud)
文件 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
Run Code Online (Sandbox Code Playgroud)
在makefile中,我自动生成当前目录中的".o"文件列表:
F90 = /usr/bin/gfortran
COMPFLAGS = -c
%.o: %.f90
$(F90) $(COMPFLAGS) $*.f90
all: $(patsubst %.f90,%.o,$(wildcard *.f90))
Run Code Online (Sandbox Code Playgroud)
当我创建项目时,make文件中的wildcard语句生成一个目标文件列表,如:
main_mod2.o main_mod.o
Run Code Online (Sandbox Code Playgroud)
然后编译失败,因为首先,需要编译main_mod.f90文件,这将给我们main_mod2.f90中使用的 …
挑战在于创建一个包含模块列表的makefile,并且不需要我排除优先级.例如,模块是
mod allocations.f08 mod precision definitions.f08 mod unit values.f08
mod blocks.f08 mod shared.f08 mod parameters.f08
mod timers.f08
Run Code Online (Sandbox Code Playgroud)
主要计划是characterize.f08.错误消息是
Fatal Error: Can't open module file ‘mprecisiondefinitions.mod’ for reading at (1): No such file or directory
主程序中的第一个语句是use mPrecisionDefinitions,中定义的模块mod precision definitions.f08.
以下基于创建FORTRAN makefile的makefile是:
# compiler
FC := /usr/local/bin/gfortran
# compile flags
FCFLAGS = -g -c -Wall -Wextra -Wconversion -Og -pedantic -fcheck=bounds -fmax-errors=5
# link flags
FLFLAGS =
# source files and objects
SRCS = $(patsubst …Run Code Online (Sandbox Code Playgroud)