【问题标题】:Problems with a makefile and mixed Fortran and Fortran 90 code生成文件以及混合 Fortran 和 Fortran 90 代码的问题
【发布时间】:2016-05-15 15:58:42
【问题描述】:

我正在尝试更新一些旧的 Fortran 代码,并且我想使用 makefile 来构建它。现在,我的 makefile 看起来像

FC = gfortran
FFLAGS = -O2

HDRS = global.h param.h coor.h
SRCS = xxx.f yyy.f zzz.f newstuff.f90 main.f
OBJS = $(SRCS:.f=.o)
OBJS := $(OBJS:.f90=.o)

runit: $(OBJS)
        $(FC) $(FFLAGS) -o $@ $^

xxx.o yyy.o main.o : global.h
yyy.o zzz.o: coor.h
xxx.o yyy.o zzz.o main.o : param.h
xxx.o main.o : newstuff.o

clean:
        rm runit *.o *.mod

.SUFFIXES: .f .f90 .o

.f.o:
        $(FC) $(FFLAGS) -c $<
.f90.o:
        $(FC) $(FFLAGS) -c $<

我有两个问题。首先,我编辑newstuff.f90,然后发出make newstuff.o,期待一个新的newstuff.o。相反,我收到 newsstuff.o 是最新的消息。任何其他源代码都不会发生这种情况。我该怎么做才能说服 newstuff.o 确实过时了?

其次,尝试破解修复程序,我插入了以下行(上面未显示):newstuff.o : newstuff.f90。但是在 makefile 中使用该行,make 返回

m2c    -o mpi_wrapper.o mpi_wrapper.mod
make: m2c: No such file or directory

为什么 make 会使用其他实用程序 m2c,不管它是什么?我如何说服它使用 gfortran?谢谢。

【问题讨论】:

  • Fortran 和 Fortran 90 的混合到底是什么? BTW .f90 并不意味着它是 Fortran 90(不幸的是)。
  • @Vladimir F 一些 Fortran 77 代码和一些新的 Fortran 90 代码。 Make似乎以不同的方式对待这两者。新代码使用模块,旧代码不使用。就 make 而言,这似乎是不同的。
  • m2c 是一个 Modula 编译器。 Make 认为 .mod 是 Modula 的源代码。你必须告诉 make 忽略 .mod 文件。
  • 我无法重现这个。你周围还有其他名为newstuff* 的文件吗?您使用的是哪个版本的 Make (make -v)?
  • 无法复制。请发帖MCVE

标签: makefile fortran fortran90


【解决方案1】:

有一个默认规则将 mod 文件视为 Modula 文件。您可以通过在 Makefile 中添加以下行和空白行来禁用此规则:

%.o : %.mod

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2017-05-18
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多