Fortran makefile用于编译带模块的固定表单和自由格式文件

时间:2014-05-30 19:00:26

标签: makefile fortran fortran90 gfortran fortran77

我正在尝试编译和链接EFDC的混合格式Fortran代码,这是一个由243 .for和.f90文件组成的数字流体动力学代码。两个.f90文件中有两个模块。

它是连续编写的,我在Linux上使用gfortran。主程序在一个.for文件中,其余的是固定和自由格式的子程序。没有任何固定和免费的文件。我无法根据具体情况调整makefile示例。

我正在尝试一些固定的自由格式转换器,但我想知道如何仅从makefile编译。

我在下面附上了我的makefile。

感谢您提供任何帮助。

# Name of executable
TARGET:= bcsa_efdc.out
# Fortran compiler
FC := gfortran
# Only using maximum optimization Fortran flag
FFLAGS := -O3
# What files to build from
OBJECTS := *.f*
# Process rules
%.o: %.for
$(FC) $(FFLAGS) $(OBJECTS) -c -o  $< $@
%.o: %.f90
$(FC) $(FFLAGS) $(OBJECTS) -c -o  $< $@
# Compile executable
$(TARGET): $(OBJECTS)
$(FC) $(FFLAGS) $(OBJECTS) -o $(TARGET)

1 个答案:

答案 0 :(得分:1)

您是自己编写Makefile还是基于Makefile示例?我看到了许多潜在的问题,但是没有模型来源的副本来测试它。试试这个

# Name of executable
TARGET:= bcsa_efdc.out
# Fortran compiler
FC := gfortran
# Only using maximum optimization Fortran flag
FFLAGS := -O3
# What files to build from
SOURCES := *.f*
# Create a list of object files from the source files
OBJECTS = $(patsubst %.for,%.o,$(patsubst %.f90,%.o,$(SOURCES)))
# Process rules
%.o: %.for
$(FC) $(FFLAGS) -c -o  $< $@
%.o: %.f90
$(FC) $(FFLAGS) -c -o  $< $@
# Compile executable
$(TARGET): $(OBJECTS)
$(FC) $(FFLAGS) $(OBJECTS) -o $(TARGET)

原始Makefile的更改包括:

  • 将对象文件名放在$(OBJECTS)而不是源文件名
  • 在编译规则中对源/对象名称的不正确依赖
  • $(TARGET)现在正确依赖于对象,而不是源和对象用于构建目标而不是重新编译源。

对于所有源文件,patsubst行只替换.f90和.for与.o。

默认情况下,gfortran将在固定格式模式下编译* .for,在自由格式模式下编译* .f90。如果您需要覆盖它,可以使用-ffree-form-ffixed-form参数。