У меня есть 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
в конце. Он должен остановиться после архивации объектных файлов, но вместо этого он продолжает удалять сгенерированные объектные файлы. Любые ответы будут очень полезны. Спасибо!