这是我在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/$@ $<
我期待依赖于&#34; npts.h&#34;的三个对象。如果npts.h比任何对象更新,则会在make(或gmake)运行时自动更新。这不会发生。 Make(和gmake)认为对象是最新的。 AFAICT,我按照GNU make manual中描述的方式做事。任何人都知道为什么make / gmake没有按照我的预期行事?谢谢。顺便说一句,实际Makefile中所有配方行的开头都有选项卡。他们离开了这里。
答案 0 :(得分:0)
我脸上的主要蛋。正如我所说,这是Makefile的缩短版本。我在真正的Makefile中发现了这个bug。有一些错误的宏。对这些东西的细节不太熟悉。 Mea culpa。很抱歉。谢谢你检查。