Makefile causes `gfortran: error: No such file or directory`

Makefile causes `gfortran: error: No such file or directory`

我正在尝试用 gfortran 编译这段代码。

生成文件:

# makefile for BIRRP

FC = gfortran
FCFLAGS = -g -fbounds-check
FLFLAGS = -g -fbacktrace
SRC = birrp.f  coherence.f  dataft.f  diagnostic.f  fft.f  filter.f  math.f  rarfilt.f  response.f  rtpss.f  utils.f  weight.f  zlinpack.f

# "make" builds all

PROGRAM = birrp
all: $(PROGRAM)
$(PROGRAM): $(SRC)
    $(FC) $(FCFLAGS) $@ $<

%.o: %.f
    $(FC) $(FLFLAGS) -o $@ $^

clean:
    rm -f *.o 

没用

gfortran -g -fbounds-check birrp birrp.f
gfortran: error: birrp: No such file or directory
Makefile:13: recipe for target 'birrp' failed
make: *** [birrp] Error 1

我正在使用 gfortran 编译器。我已经从我的其他程序中复制了 Makefile。


添加后-o:

FC = gfortran
FCFLAGS = -g -c -fbounds-check
FLFLAGS = -g -fbacktrace
SRC = birrp.f coherence.f dataft.f diagnostic.f fft.f filter.f math.f rarfilt.f response.f rtpss.f utils.f weight.f zlinpack.f

# "make" builds all

PROGRAM = birrp
all: $(PROGRAM)

$(PROGRAM): $(SRC)
    $(FC) $(FCFLAGS) -o $@ $<

%.o: %.f
    $(FC) $(FLFLAGS) -o $@ $^

clean:
    rm -f *.o 

现在可以编译了

        gfortran -g -c -fbounds-check -o birrp birrp.f

为什么?

gfortranbirrp 解释为源文件,但您希望它作为 outfile.

man gfortran

表示 outfile-o 参数指定,因此您的目标变为:

$(PROGRAM): $(SRC)
    $(FC) $(FCFLAGS) -o $@ $<

但这并不能解决你所有的问题。根据 GNU Make manual $< 指定 第一个依赖项 而不是全部。您总是希望拥有完整的依赖项列表,即 $^.

所以你的目标变成了:

$(PROGRAM): $(SRC)
    $(FC) $(FCFLAGS) -o $@ $^