0
私のライブラリのコンパイルを数秒間切るために使用できる方法はありますか?できるだけ早くライブラリをすばやくコンパイルするMakefileの最適化?
私の古いメイクファイルは、実行するには1.86秒かかり、合計で5.147個でした。 私は中に、
%.o: %.c
$(CC) $(FLAGS) -c -o [email protected] $<
変更後:$(CC)$(FLAGS)-c $(OBJ:.oの= .C)@
そして、すべての出力を黙らせる私の新しいを@
を追加しましたMakefileの実行には1.40秒、合計で最大3.481秒でした。
メイクファイルを最適化して、より速く実行させるか、「役に立たせる」方法があるのだろうか?わずかに高速のコンパイルされたプログラムを得るためにマイクロ調整について知るにはどこに行くのですか?
https://github.com/Hourai42/libft/blob/master/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が最初のコンパイルからいくらか速くなると信じていますが、いくつかのソースファイルだけが変更されたときに再構築を実行するのはひどいことです。おそらくこれは以前のバージョンから継承された問題ですが、いずれの場合でも高速な* re *ビルドは通常、速いビルドからのビルドよりもはるかに貴重です。 –