我无法使用此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时,我不想让它咬我。
答案 0 :(得分:2)
有一个形式的后缀规则
%.o : %.mod
...
您的规则:
.SUFFIXES : .F90 .o
添加(或重申)两个后缀,但不会禁用其他后缀规则。为此,再添加一条规则:
.SUFFIXES :
.SUFFIXES : .F90 .o