Это вызвано неверным отступом вместе со встроенным правилом. Строка с отступом $(PROGRAMS)
не определяет цель, а скорее интерпретируется как часть рецепта для all
. Ваш mi_mkfs
файл фактически генерируется неявным правилом, которое можно проверить с помощью make -p
:
mi_mkfs: mi_mkfs.o
# Implicit rule search has been done.
# Implicit/static pattern stem: 'mi_mkfs'
# Modification time never checked.
# File has been updated.
# Failed to be updated.
# automatic
# @ := mi_mkfs
# automatic
# % :=
# automatic
# * := mi_mkfs
# automatic
# + := mi_mkfs.o
# automatic
# | :=
# automatic
# < := mi_mkfs.o
# automatic
# ^ := mi_mkfs.o
# automatic
# ? := mi_mkfs.o
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/19=5%
# recipe to execute (built-in):
$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@
Чтобы заставить его работать, сделайте отступ в строке $(PROGRAMS)
правильно:
$(PROGRAMS): $(LIBRARIES) $(INCLUDES)
$(CC) $(LDFLAGS) $(LIBRARIES) $@.o -o $@
Теперь вывод отличается:
$ make
gcc ficheros_basico.o bloques.o mi_mkfs.o -o mi_mkfs
, так как теперь вызывается ваше пользовательское правило связывания:
$ make -p
...
mi_mkfs: ficheros_basico.o bloques.o ficheros_basico.h bloques.h
# Implicit rule search has not been done.
# Implicit/static pattern stem: ''
# Modification time never checked.
# File has been updated.
# Failed to be updated.
# automatic
# @ := mi_mkfs
# automatic
# % :=
# automatic
# * :=
# automatic
# + := ficheros_basico.o bloques.o ficheros_basico.h bloques.h
# automatic
# | :=
# automatic
# < := ficheros_basico.o
# automatic
# ^ := ficheros_basico.o bloques.o ficheros_basico.h bloques.h
# automatic
# ? := ficheros_basico.o bloques.o ficheros_basico.h bloques.h
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/16=6%
# recipe to execute (from 'Makefile', line 14):
$(CC) $(LDFLAGS) $(LIBRARIES) $@.o -o $@