相关疑难解决方法(0)

在Fortran Makefile中自动排序对象文件"*.o"

这里我有两个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中使用的 …

dependencies fortran makefile wildcard

9
推荐指数
1
解决办法
3025
查看次数

如何使用模块为Fortran程序创建makefile

挑战在于创建一个包含模块列表的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)

fortran module makefile gfortran

3
推荐指数
1
解决办法
4145
查看次数

标签 统计

fortran ×2

makefile ×2

dependencies ×1

gfortran ×1

module ×1

wildcard ×1