0

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

4

1 回答 1

0

我脸上的主要鸡蛋。正如我所说,这是 Makefile 的缩短版本。我在真正的 Makefile 中发现了这个错误。有一些错误命名的宏。对这些东西的细节没有太多经验。过失。很抱歉。感谢您的检查。

于 2012-07-17T17:06:35.177 回答