我正在尝试编译和链接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)
答案 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的更改包括:
对于所有源文件,patsubst
行只替换.f90和.for与.o。
默认情况下,gfortran将在固定格式模式下编译* .for,在自由格式模式下编译* .f90。如果您需要覆盖它,可以使用-ffree-form
和-ffixed-form
参数。