[C]例によるMakefileの作成
Makefileとは?
makeは、条件に従って所定のshellコマンドを実行するプログラムです.
この場合、コマンドを実行する条件を含むファイルをmakefileと呼びます.
ではShell Scriptでいいんじゃないですか?
Makefileは、変更されたソースファイルのみをコンパイルします.
Shell Scriptにプログラム全体をコンパイルさせます.
そのため、Makefileの方が効果的です.
例
NAME = libft.a
CC = gcc
CFLAG = -Wall -Wextra -Werror
RM = rm -f
AR = ar
ARFLAGS = rcs
INC = libft.h
SRCS = ft_isalpha.c ft_isdigit.c ...
OBJS = $(SRCS:.c=.o)
all : $(NAME)
$(NAME) : $(OBJ_FILES)
$(AR) $(ARFLAGS) $@ $^
.c.o:
$(CC) -I $(INC) $(CFLAG) -c -o $@ $<
clean:
$(RM) $(OBJS)
fclean: clean
$(RM) $(NAME)
re: fclean all
.PHONY : all clean fclean re
NAME(TARGET):最終的に作成するアーカイブ名
CC:コンパイルタイプ
CFAG:コンパイルオプション
RM:削除オプション
AR:ar(複数のオブジェクトを1つのアーカイブにマージ)
ARFLAGS:arオプション
NAME = libft.a
CC = gcc
CFLAG = -Wall -Wextra -Werror
RM = rm -f
AR = ar
ARFLAGS = rcs
INC = libft.h
SRCS = ft_isalpha.c ft_isdigit.c ...
OBJS = $(SRCS:.c=.o)
all : $(NAME)
$(NAME) : $(OBJ_FILES)
$(AR) $(ARFLAGS) $@ $^
.c.o:
$(CC) -I $(INC) $(CFLAG) -c -o $@ $<
clean:
$(RM) $(OBJS)
fclean: clean
$(RM) $(NAME)
re: fclean all
.PHONY : all clean fclean re
-アーカイブインデックスを作成しないと、リンク速度が遅くなります.
SRCS:コンパイルするcファイル
OBJS:objectファイル((src:.c=.o)コマンドSRCS用.cファイル.oに変換
all:成果物
.PHONY:targetにファイルが重なると、このコマンドが実行できないことを防止します.
デフォルトのコマンドフォーマット
target : dependency1 ....2 .... n
command1
command2
$(NAME) : $(OBJ_FILES)
$(AR) $(ARFLAGS) $@ $^
$(NAME) : target
$(OBJ_FILES) : dependency1
$(AR) $(ARFLAGS) $@ $^ : command
해석 : 다음과 같은 명령어로. dependency를 이용해 target을 생성함.
실제 수행되는 명령어 : ar rcs libft.a ft_isalpha.o ...
$@:ターゲット名に対応します.$<:依存ファイルリストの最初のファイルに対応します.
$^:依存ファイルのリスト全体に対応します.
$? : ターゲットより更新された依存ファイルに対応します.
$+:$^と似ていますが、重複するすべてのファイル名が含まれています.
拡張子ルール
ファイル拡張子を表示し、適切な演算を実行するルール.
.c.o:
$(CC) -I $(INC) $(CFLAG) -c -o $@ $<
.c.o 표현은 .c와 .o 확장자를 가진 파일들을 확장자 규칙에 의거해서 처리될 수 있도록 표현된 것 이다.
즉 아래 명령어를 통해 .c를 컴파일해서 .o를 만들어 내는 루틴이 자동적으로 동작한다.
$(CC) -I $(INC) $(CFLAG) -c -o $@ $<
실제 수행되는 명령어 : gcc -I libft.h -Wall -Wextra -Werror -c -o ft_isalpha.a ... .a ft_isalpha.c ... .c
リファレンス
C++Makefileを噛む
GNU Makeレッスン
Reference
この問題について([C]例によるMakefileの作成), 我々は、より多くの情報をここで見つけました https://velog.io/@s_i_o_n/C-예제를-통한-Makefile만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol