これが私が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」に依存する3つのオブジェクトがmake(またはgmake)の実行時に自動的に更新されることを期待していました。これは起こりません。Make(およびgmake)は、オブジェクトが最新であると見なします。AFAICT、GNUmakeマニュアルに記載されている方法で作業を行っています。make / gmakeが私が期待したことをしていない理由を誰かが知っていますか?ありがとう。ところで、実際のMakefileのすべてのレシピ行の先頭にタブがあります。彼らはここに去りました。