: 여러 컴파일들이 존재하고 버젼이 달라질 텐데, 자동적으로 수동된 걸 체크하고 실행파일을 생성하는 명령어
컴파일 → 어셈블리어로 변환
: C → O (object file) , 여러 목적파일들을 링킹, 그리고 하나의 파일로 합치는 작업
파일을 수정하면 관련 자료에 대해서 모든 걸 하나씩 오브젝트 파일로 만들어줘야 하는데 Make 를 통해서, 좀 더 빠르게 컴파일 할 수 있도록 하기 위해서 사용을 하고 있다.
확장자 규칙 .SUFFIXES
.SUFFIXES : .c .o
주의 깊게 처리할 파일들의 확장자를 등록
1. 매크로
OBJ=test.o test1.o write.o
CC=gcc
CFLAGS=-c
TARGET=test
$(TARGET): $(OBJ)
$(CC) -o $(TARGET) $(OBJ)
clean:
rm -rf $(OBJ) $(TARGET)
2. 내부매크로
$*
: 타켓보다 최근에 변경된 종속 항목 이름(확장자 제외)
$<
: 현재의 타겟보다 최근에 변경된 종속 항목리스트
main.o: main.c
gcc-c $*.<
main.c를 의미
$@
: 현재 타겟의 이름
test: main.o read.o write.o
gcc-o $@ $*.c
test를 의미
$^
: 현재의 타겟보다 최근에 변경된 필요 항목들 리스트
test: main.o read.o write.o
gcc-o $@ $^
main.o read.o write.o를 의미
.c.o:
$(CC)-c $< -o $@
.c파일이 컴파일 되어 .o파일이 된다
-DDEBUG
: 디버그가 정의되어 있다면 디버그를 정의해라 ifdefine?
-I/usr/lib/inlcude
: 헤더파일을 저 주소에서 찾아보라는 명령어
-L/usr/lib
: 라이브러리 위치를 지정
-lm
: 라이브러리 이름
C := $(B)
:= 의 사용은 해당 시점에서의 변수값을 확인
- $(addsuffix 접미사, 문자열)
$(addsufix .c, memo main) => memo.c main.c
- $(addprefix 접두어, 문자열)
$(addprefix src/, memo main) => src/memo src/main
.PHONY : clean main 등의 이름이 같은 디렉토리가 있거나 그러면 make 를 실행하는데, 있어서 문제가 생긴다. 그렇기 때문에 그걸 방지 하기 위해서 명령어로써의 역할을 하기 위해서 지정하는 역할
ar rcs
"묶음 파일을 만들고 조작하고 추출한다" 라고 쓰여있는데, r옵션은 오브젝트를 추가, s옵션은 인덱스를 만들며, c옵션으로 아카이브(하나 이상의 파일과 메타 데이터를 통합하고 일정한 형식으로 저장하는 파일)를 생성한다.
긴 명령어를 여러 라인으로 표시
OBJS = shape.o \
circle.o \
bezier.o
ex)
CC = gcc
CFLAGS = -Wall -Wextra -Werror
TARGET = ft_display_file
SOURCES = main.c
OBJECTS = $(SOURCES:.c=.o)
all: $(TARGET)
%.o: %.c
$(CC) $(CFLAGS) -c $<
$(TARGET): $(OBJECTS)
$(CC) $(CFLAGS) -o $@ $^
clean:
rm -rf $(OBJECTS)
fclean: clean
rm -rf $(TARGET)
re: fclean all
▼▼▼Make 관련 ▼▼▼
'42 Seoul' 카테고리의 다른 글
[42Seoul] libft (part. 1) (0) | 2021.05.03 |
---|---|
[42Seoul] cat 구현하기 (0) | 2021.04.22 |
[42Seoul] basename 이름만 보이는 함수 (0) | 2021.04.22 |
[42Seoul] errno.h 변수를 이용한 오류처리 (0) | 2021.04.20 |
[42Seoul] open, read, write 구현 (0) | 2021.04.19 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!