这是我在 Linux 系统上使用的 Makefile 的缩短版本:
VPATH=altsrc:src:obj
OBJECTS=\
nondepcode1.o \
nondepcode2.o \
nondepcode3.o \
depcode1.o \
depcode2.o \
depcode3.o
DEP_OBJS= depcode1.o depcode2.o depcode3.o
# Targets
execute: $(OBJECTS)
gfortran -o $@ $^ $(LFLAGS)
$(DEP_OBJS): npts.h
obj/%.o: %.f
$(FORTRAN) $(FFLAGS) $< -o $@
obj/%.o: %.f90
$(FORTRAN) $(FFLAGS) $< -o $@
# Rules
.f.o:
$(FORTRAN) $(FFLAGS) -o obj/$@ $<
%.o: %.f90
$(FORTRAN) $(FFLAGS) -o obj/$@ $<
如果 npts.h 比任何对象更新,我期待依赖于“npts.h”的三个对象将在运行 make(或 gmake)时自动更新。这不会发生。Make(和 gmake)认为对象是最新的。AFAICT,我正在按照GNU make manual中描述的方式做事。任何人都知道为什么 make/gmake 没有达到我的预期?谢谢。顺便说一句,实际 Makefile 中所有配方行的开头都有标签。他们离开了这里。