내 라이브러리를 몇 초 동안 면도 할 수있는 방법이 있습니까?가능한 한 빨리 라이브러리를 빠르게 컴파일하기위한 메이크 파일 최적화?
내 오래된 메이크 파일이 실행될 때까지 1.86 초가 걸리고 총 5.147 회까지 실행됩니다. 나는 속으로
%.o: %.c
$(CC) $(FLAGS) -c -o [email protected] $<
변경 후 : $ (CC) $ (FLAGS) -c $ (OBJ : .o 인 =이 .c) @
그리고, 모든 출력을 침묵 내 새를 @
추가 Makefile은 실행에 1.40 초, 총 3.481 초가 걸렸습니다.
makefile을 최적화하여 더 빠르게 실행하거나 "유용하게"만들 수있는 방법이 있는지 궁금합니다. 약간 더 빠른 컴파일 된 프로그램을 얻기 위해 마이크로 조정에 대해 배우려면 어디로 가야합니까? (큰 개선)에 필요 것만
NAME = libft.a
FLAGS = -Wall -Wextra -Werror
CC = gcc
OBJ = ft_strrchr.o ft_putstr.o ft_strcmp.o ft_strlcat.o ft_memcpy.o \
ft_strequm.o ft_memmove.o ft_strsplit.o ft_strncpy.o ft_lstmap.o \
ft_lstadd.o ft_striter.o ft_strstr.o ft_isdigit.o ft_putnbr.o \
ft_memccpy.o ft_strdel.o ft_nmbwrd.o ft_memchr.o ft_bzero.o \
ft_isalnum.o ft_putstr_fd.o ft_lstiter.o ft_lstdelone.o ft_toupper.o
\
ft_strcpy.o ft_lstnew.o ft_strdup.o ft_putnbr_fd.o ft_striteri.o \
ft_strmap.o ft_putendl_fd.o ft_memdel.o ft_strnstr.o ft_putchar.o \
ft_isascii.o ft_strlen.o ft_strsub.o ft_strnew.o ft_memalloc.o
ft_putendl.o \
ft_strncat.o ft_itoa.o ft_strncmp.o ft_memcmp.o ft_strtrim.o
ft_strequ.o
\
ft_putchar_fd.o ft_memset.o ft_isalpha.o ft_strcat.o ft_tolower.o \
ft_strnequ.o ft_strjoin.o ft_atoi.o ft_strclr.o ft_strmapi.o \
ft_isprint.o ft_lstdel.o ft_strchr.o ft_mallocwrd.o ft_countplace.o \
ft_isprime.o ft_hassqrt.o ft_fibonacci.o ft_recursive_power.o \
ft_recursive_factorial.o
all: $(NAME)
$(NAME):
@$(CC) $(FLAGS) -c $(OBJ:.o=.c)
@ar rc $(NAME) $(OBJ)
@ranlib $(NAME)
clean:
@/bin/rm -f $(OBJ)
fclean: clean
@/bin/rm -f $(NAME)
re: fclean all
.PHONY: clean fclean re
현재 디렉토리에 위의 c 개 파일 만있는 경우'@ $ (CC) $ (FLAGS) -c * .c'을 시도합니다. 대체가되지만 디스크를 검사합니다. 시도할만한 가치가 있지만, 당신의 makefile은 이미 매우 최적화 된 것처럼 보입니다. 명령 경로를 하드 코드하여 경로 조회를 피할 수도 있습니다 ... –
컴파일하는 데 얼마나 빨리 프로그램이 필요합니까? 일어날 수 있지만 컴파일 속도가 최적화할만한 가치는 거의 없습니다. –
새 Makefile은 스크래치 컴파일보다 다소 빠르다고 믿을 수 있지만 몇 가지 소스 파일 만 변경된 경우 다시 작성하는 것은 끔찍한 일입니다. 아마도 이전 버전에서 상속 된 문제 일 수 있지만, 빠른 * 빌드 * 빌드는 대개 스크래치 빌드보다 빠릅니다. –