Makefile запускает неопределенную команду - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть make-файл, который компилирует исходные файлы C в соответствующие объектные файлы, а затем архивирует эти объектные файлы. Вот как выглядит make-файл: -

.PHONY = all clean fclean re

SRC = ./src/

INC = ./inc

CC = gcc

CFLAGS = -I${INC} -Wall -Wextra -Werror

SRCS := $(wildcard ${SRC}*.c)

OBJS := $(patsubst ./src/%.c,%.o,${SRCS})

BINS := $(OBJS:%.o=%)

all: compile archive

archive:
    @echo "creating archive..."
    @ar cr libsst.a ${OBJS}
    @echo "DONE!"

compile: ${BINS}

%: %.o
    @echo "generating $<..."

%.o: ${SRC}%.c
    @echo "compiling $<..."
    @gcc -c $< ${CFLAGS}

fclean: clean
    @echo "removing archive..."
    @rm -f libsst.a
    @echo "DONE!"

clean:
    @echo "removing object files..."
    @rm -f *.o
    @echo "DONE!"


re: fclean all

Проблема в том, что в конце он запускает дополнительную команду rm, которая не указана в рецепте для compile или архив целей. Это результат, который я получаю при запуске make: -

compiling src/sst_tolower.c...
generating sst_tolower.o...
compiling src/sst_strmapi.c...
generating sst_strmapi.o...
compiling src/sst_strrchr.c...
generating sst_strrchr.o...
compiling src/sst_strcat.c...
generating sst_strcat.o...
compiling src/sst_striteri.c...
generating sst_striteri.o...
compiling src/sst_atoi.c...
generating sst_atoi.o...
compiling src/sst_strncpy.c...
generating sst_strncpy.o...
compiling src/sst_lstdel.c...
generating sst_lstdel.o...
compiling src/sst_putstr.c...
generating sst_putstr.o...
compiling src/sst_isascii.c...
generating sst_isascii.o...
compiling src/sst_strnew.c...
generating sst_strnew.o...
compiling src/sst_toupper.c...
generating sst_toupper.o...
compiling src/sst_lstadd.c...
generating sst_lstadd.o...
compiling src/sst_putchar_fd.c...
generating sst_putchar_fd.o...
compiling src/sst_memccpy.c...
generating sst_memccpy.o...
compiling src/sst_strncat.c...
generating sst_strncat.o...
compiling src/sst_strsub.c...
generating sst_strsub.o...
compiling src/sst_strclr.c...
generating sst_strclr.o...
compiling src/sst_putnbr_fd.c...
generating sst_putnbr_fd.o...
compiling src/sst_memset.c...
generating sst_memset.o...
compiling src/sst_strdup.c...
generating sst_strdup.o...
compiling src/sst_lstiter.c...
generating sst_lstiter.o...
compiling src/sst_strmap.c...
generating sst_strmap.o...
compiling src/sst_putendl_fd.c...
generating sst_putendl_fd.o...
compiling src/sst_strlcat.c...
generating sst_strlcat.o...
compiling src/sst_strstr.c...
generating sst_strstr.o...
compiling src/sst_strchr.c...
generating sst_strchr.o...
compiling src/sst_strncmp.c...
generating sst_strncmp.o...
compiling src/sst_putchar.c...
generating sst_putchar.o...
compiling src/sst_strequ.c...
generating sst_strequ.o...
compiling src/sst_memmove.c...
generating sst_memmove.o...
compiling src/sst_strnequ.c...
generating sst_strnequ.o...
compiling src/sst_memchr.c...
generating sst_memchr.o...
compiling src/sst_striter.c...
generating sst_striter.o...
compiling src/sst_strdel.c...
generating sst_strdel.o...
compiling src/sst_memcpy.c...
generating sst_memcpy.o...
compiling src/sst_lstdelone.c...
generating sst_lstdelone.o...
compiling src/sst_putendl.c...
generating sst_putendl.o...
compiling src/sst_isprint.c...
generating sst_isprint.o...
compiling src/sst_strsplit.c...
generating sst_strsplit.o...
compiling src/sst_isdigit.c...
generating sst_isdigit.o...
compiling src/sst_lstnew.c...
generating sst_lstnew.o...
compiling src/sst_bzero.c...
generating sst_bzero.o...
compiling src/sst_itoa.c...
generating sst_itoa.o...
compiling src/sst_putnbr.c...
generating sst_putnbr.o...
compiling src/sst_lstmap.c...
generating sst_lstmap.o...
compiling src/sst_strlen.c...
generating sst_strlen.o...
compiling src/sst_strtrim.c...
generating sst_strtrim.o...
compiling src/sst_memcmp.c...
generating sst_memcmp.o...
compiling src/sst_memalloc.c...
generating sst_memalloc.o...
compiling src/sst_strjoin.c...
generating sst_strjoin.o...
compiling src/sst_memdel.c...
generating sst_memdel.o...
compiling src/sst_putstr_fd.c...
generating sst_putstr_fd.o...
compiling src/sst_isalnum.c...
generating sst_isalnum.o...
compiling src/sst_strcpy.c...
generating sst_strcpy.o...
compiling src/sst_isalpha.c...
generating sst_isalpha.o...
compiling src/sst_strnstr.c...
generating sst_strnstr.o...
compiling src/sst_strcmp.c...
generating sst_strcmp.o...
creating archive...
DONE!
rm sst_atoi.o sst_putendl.o sst_strmap.o sst_strtrim.o sst_putnbr.o sst_memdel.o sst_strequ.o sst_putendl_fd.o sst_strmapi.o sst_putstr.o sst_strclr.o sst_itoa.o sst_strlen.o sst_isdigit.o sst_memchr.o sst_memset.o sst_tolower.o sst_memalloc.o sst_strjoin.o sst_strrchr.o sst_strlcat.o sst_strncat.o sst_isprint.o sst_strcat.o sst_strchr.o sst_strsplit.o sst_putchar.o sst_memcpy.o sst_lstiter.o sst_lstnew.o sst_striter.o sst_putnbr_fd.o sst_bzero.o sst_isalpha.o sst_strsub.o sst_lstadd.o sst_strncpy.o sst_strcpy.o sst_isalnum.o sst_memcmp.o sst_strdup.o sst_lstdelone.o sst_lstdel.o sst_memmove.o sst_strnew.o sst_lstmap.o sst_toupper.o sst_striteri.o sst_strnstr.o sst_isascii.o sst_putstr_fd.o sst_strcmp.o sst_memccpy.o sst_strstr.o sst_strnequ.o sst_strdel.o sst_strncmp.o sst_putchar_fd.o

Я не могу понять, как make-файл выполняет команду rm в конце. Он должен остановиться после архивации объектных файлов, но вместо этого он продолжает удалять сгенерированные объектные файлы. Любые ответы будут очень полезны. Спасибо!

...