单个目标的多个规则 - 不能按预期工作

时间:2012-07-12 18:18:28

标签: makefile gnu-make

这是我在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中所有配方行的开头都有选项卡。他们离开了这里。

1 个答案:

答案 0 :(得分:0)

我脸上的主要蛋。正如我所说,这是Makefile的缩短版本。我在真正的Makefile中发现了这个bug。有一些错误的宏。对这些东西的细节不太熟悉。 Mea culpa。很抱歉。谢谢你检查。