Несколько правил для одной цели - не работает, как ожидалось
Вот сокращенная версия Makefile, с которым я борюсь в системе Linux:
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", будут автоматически обновлены при запуске make (или gmake), если npts.h был более поздним, чем любой из объектов. Такого просто не бывает. Make (и gmake) считает, что объекты обновлены. AFAICT, я делаю вещи так, как они описаны в GNU make manual. У кого-нибудь есть идеи, почему make / gmake не выполняет то, что я ожидал? Благодарю. Кстати, в начале всех строк рецептов есть закладки в самом файле Makefile. Они ушли сюда.
1 ответ
Большое яйцо на моем лице. Как я уже сказал, это была сокращенная версия Makefile. Я нашел ошибку в реальном Makefile. Были некоторые неправильно названные макросы. Не слишком опытный с тонкостями этого материала. Моя вина. Очень жаль. Спасибо за проверку.