试图了解为什么make失败

时间:2018-08-17 21:00:31

标签: makefile fortran

我无法使用此Makefile来编译“ balance_test” ...

FLAGS=-g

OBJS=balance.o balance_drv.o
SRCS=$(OBJS:.o=.F90)

balance_test: $(OBJS)
        gfortran $(FLAGS) -o $@ $(OBJS)

balance.mod : balance.o
balance.o : balance.F90
balance_drv.o: balance_drv.F90 balance.mod

clean:
        rm balance_test *.o *.mod


.SUFFIXES : .F90 .o

.F90.o :
        gfortran -c $(FLAGS) $^

...因为make认为balance.o取决于balance.mod,因此它认为存在循环依赖关系。 (balance_drv.o 确实取决于balance.mod,因为balance_drv.F90使用module balance。)

我通过专门为balance.o和balance_drv.o指定编译语句来解决此问题。但是我想知道我到底对后缀规则有什么误解,因为当我要编写更大的Makefile时,我不想让它咬我。

1 个答案:

答案 0 :(得分:2)

有一个形式的后缀规则

%.o : %.mod
    ...

您的规则:

.SUFFIXES : .F90 .o

添加(或重申)两个后缀,但不会禁用其他后缀规则。为此,再添加一条规则:

.SUFFIXES :
.SUFFIXES : .F90 .o