[Libft] Makefile, libft.h

sugyeonghh·2022년 2월 18일
0

42SEOUL

목록 보기
3/3

Makefile

규칙

  • target: 빌드의 결과로 만들고자 하는 (목적)파일
  • dependencies: 타겟을 만들기 위해 필요한 파일들(의존성)
  • command: 타켓을 빌드하기 위한 bash 명령어

매크로

  • 상수 선언, 대문자로 하는 것이 관습
  • NAME: library name
  • SRCS: source files
  • OBJS: object files
  • CC: c compiler
  • CFLAGS: c compile flags
  • RM: remove

.PHONY

  • 더미 타겟과 같은 이름의 파일이 존재할 때 make가 이미 빌드를 끝냈다고 판단하여 해당 더미 타겟의 명령어를 수행하지 않을 때 .PHONY 구문으로 정의하여 방지할 수 있음
  • .PHONY all clean fclean re
  • make
    • Makefile에 정의된 규칙들 중 한 개의 타겟을 실행
    • make (타켓을 명시하지 않는 경우 가장 위에 정의된 타겟 실행)
    • make (target)

코드

NAME = libft.a

CC = gcc
CFLAGS = -Wall -Wextra -Werror
AR = ar rcs
RM = rm -f

FILES = ft_memset \
		ft_bzero \
		ft_memcpy \
		ft_memccpy \
		ft_memmove \
        .
        .
        .
        
FILES_B = 	ft_lstnew \
	  		ft_lstadd_front \
	  		ft_lstsize \
	  		ft_lstlast \
	  		ft_lstadd_back \
            .
            .
            .
            
SRCS_DIR = ./
SRCS = $(addprefix $(SRCS_DIR), $(addsuffix .c, $(FILES)))
SRCS_B = $(addprefix $(SRCS_DIR), $(addsuffix .c, $(FILES_B))

OBJS_DIR = ./
OBJS = $(addprefix $(OBJS_DIR), $(addsuffix .o, $(FILES)))
OBJS_B = $(addprefix $(OBJS_DIR), $(addsuffix .o, $(FILES_B)))


.c.o: $(SRCS)
	$(CC) $(CFLAGS) -c $< -o $(<:.c=.o)

$(NAME): $(OBJS)
	$(AR) $@ $^

bonus: $(OBJS_B)
	$(AR) $(NAME) $^

all: $(NAME)

clean:
	$(RM) $(OBJS) $(OBJS_B)

fclean: clean
	$(RM) $(NAME)

re: clean all

.PHONY: bonus all clean fclean re

libft.h

문법

  • ifndef {~.h}: {~.h}가 정의되지 않았으면
  • define {~.h}: {~.h}를 다음과 같이 정의
  • endif: 종료

코드

#ifndef LIBFT_H
# define LIBFT_H

# include <unistd.h>
# include <stdlib.h>

typedef struct		s_list
{
	void			*content;
	struct s_list	*next;
}					t_list;

void				*ft_memset(void *b, int c, size_t len);
void				ft_bzero(void *s, size_t n);
void				*ft_memcpy(void *dst, const void *src, size_t n);
void				*ft_memccpy(void *dst, const void *src, int c, size_t n);

.
.
.

#endif
profile
우당탕탕 뿌엥🥺

0개의 댓글