diff --git a/8.3/README.md b/8.3/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b8b185927b33370a86ce1f37ab72ee1f6fce2435
--- /dev/null
+++ b/8.3/README.md
@@ -0,0 +1,58 @@
+# printf
+
+`int printf(const char *format, ...)`  
+printf 함수는 매개변수를 format에 따라서 출력해주는 함수다.
+
+`int fprintf(FILE *stream, const char *format, ...)`  
+printf 함수는 실행될 때 내부에서 fprintf 함수로 바뀌어서 실행된다.
+
+```
+printf("Hello World");
+fprintf(stdout, "Hello World");
+```
+printf 함수가 fprintf 함수로 바뀔 때 stream에 stdout이 들어가게 되고 두 함수는 완전히 같은 역할을 한다.
+
+# stdio.h
+
+standard input output library의 줄임말로 표준 입출력과 관련된 함수, 매크로 등이 포함된 헤더 파일이다.
+
+### stream
+
+* stdin  
+표준 입력 스트림(키보드)를 참조하는 FILE에 대한 포인터
+
+* stdout  
+표준 출력 스트림(스크린)를 참조하는 FILE에 대한 포인터
+
+* stderr  
+표준 오류 스트림(스크린)를 참조하는 FILE에 대한 포인터
+
+# man
+
+`man <command | function | header file | ...>`  
+manual의 줄임말로 명령어나 함수, 헤더 파일 등에 대한 사용법을 알려주는 명령어다.
+
+# redirection
+
+redirection이란 스트림의 흐름을 바꿔주는 것이다. redirection을 이용해 프로세스의 스트림을 콘솔이 아닌 파일을 사용할 수 있다.
+
+* \>  
+`file > output`  
+표준 출력을 파일로 redirection한다. 파일이 없으면 새로 만들고, 파일이 있으면 덮어쓴다.
+```
+$ ./test > output_data
+```
+
+* \>>  
+`file >> output`  
+표준 출력을 파일로 redirection한다. 파일이 없으면 새로 만들고, 파일이 있으면 파일의 끝에 덧붙인다. 
+```
+$ ./test >> output_data
+```
+
+* <  
+`file < input`  
+ 파일로부터 표준 입력을 받도록 redirection한다.
+```
+$ ./test < intput_data
+```
\ No newline at end of file
diff --git a/8.5/README.md b/8.5/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f27414c9ff0420c9bb5939b3b47f413afa70cd15
--- /dev/null
+++ b/8.5/README.md
@@ -0,0 +1,103 @@
+# C Preprocessor
+
+전처리기(preprocessor)는 전처리(.c -> .i)를 해주는 도구이다. 전처리는 .h에 있는 텍스트들을 .c에 치환(붙여넣기)해주는 과정이다. C Preprocessor는 CPP로 줄여쓰기도 한다.
+
+### Including files
+
+* `#include <filename>`  
+표준 헤더 파일을 include하는 방식으로 표준 라이브러리들이 모여있는 폴더에서 헤더 파일을 검색해서 include한다.
+
+* `#include "filename"`  
+사용자 헤더 파일을 include하는 방식으로 현재 소스 파일이 위치한 폴더에서 헤더 파일을 검색해서 include한다.
+
+### Conditional compilation
+
+#if, #ifdef, #ifndef, #else, #elif, #endif는 조건부 컴파일을 할 수 있게 한다. 조건이 맞지 않으면 그 부분이 컴파일에서 제외된다. 즉, 소스 자체가 없는 효과가 있다.
+#error을 사용하여 컴파일을 실패하게 할 수도 있다.
+
+### Macro definition
+
+특정 숫자, 함수, 프로그램 블록을 다른 형태로 변환 지정한다. 변환은 원래 한 줄만 가능하지만 \를 사용하여 여러 줄을 연결할 수 있다.
+
+* `#define <identifier> <replacement token list>`  
+대상변환형(Object-like macros)이라고 하며 identifier를 replacement token list로 변환한다.
+
+* `#define <identifier>(<parameter list>) <replacement token list>`  
+유사함수변환형(Function-like macros)이라고 하며 identifier와 parameter list를 replacement token list로 변환한다.
+
+* `#undef <identifier>`  
+#undef를 사용해 정의된 매크로를 무효화할 수도 있다.
+
+```c
+#define f(a) a*a
+b = f(20+13) // b = 293
+```
+전처리는 단순히 텍스트를 치환하는 것이기 때문에 위의 코드를 실행할 시
+```c
+b = 20 + 13 * 20 + 13
+```
+이렇게 치환되므로 괄호를 최대한 많이 써주는 것이 좋다.
+```c
+#define f(a) ((a)*(a))
+b = f(20+13) // b = 1089
+```
+
+### etc.
+
+* #pragma once  
+`#pragma once`를 사용하여 여러번 include하는 것을 방지할 수 있다.
+
+*  Token stringification  
+`#define <identifier>(<parameter>) #parameter`  
+#연산자는 token을 문자열 상수로 변환한다.
+
+* Token concatenation  
+`#define <identifier>(<parameter>) parameter##string`  
+##연산자는 두 token을 하나로 연결하여 변환한다.
+
+* Debuging macros  
+디버깅을 하면서 어느 부분에서 에러가 났는 지 알려준다.
+
+	* __FILE\_\_  
+	에러가 발생한 파일 경로
+	* __LINE\_\_  
+	에러가 발생한 라인
+	* __FUNCTION\_\_  
+	에러가 발생한 함수
+
+# Multiple file compile
+
+* func.h
+```
+#define SQAURE(a) ((a)*(a))
+extern int func(int a);
+```
+
+* func.c
+```
+#include "func.h"
+
+int func(int a)
+{
+	return(a * 10);
+}
+```
+
+* main.c
+```
+#include <stdio.h>
+#include "func.h"
+
+int main()
+{
+	printf("func(100): %d SQUARE(10): %d\n", func(100), SQUARE(10));
+	return 0;
+}
+```
+
+보통 이런 식으로 코드를 작성하고
+
+```
+$ gcc main.c func.c
+```
+이렇게 컴파일, 링크하여 실행 파일을 실행한다.
\ No newline at end of file
diff --git a/8.6/README.md b/8.6/README.md
index d4918ce8fdbbf0a49bf10ccc98c48d0263670e3f..a63006deb7f74c801d6ef563fb4212cf34c5c138 100644
--- a/8.6/README.md
+++ b/8.6/README.md
@@ -1,4 +1,4 @@
-# 컴파일러 VS 인터프리터
+# 컴파일러 vs 인터프리터
 
 컴파일러와 인터프리터는 고급언어로 작성된 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분된다.
 
@@ -30,26 +30,26 @@
 # GCC 명령어 옵션
 
 * -o  
-		지정한 파일명에 출력
+		지정한 파일명에 출력한다.
 	```
 	$ gcc -o 00.option-o 00.option-o.c
 	```
 	![o](../Images/o.png)
 	
 * -E  
-	전처리하여 전처리된 소스 파일(.i)을 생성
+	전처리하여 전처리된 소스 파일(.i)을 생성한다.
 	```
 	$ gcc -E 01.option-E.c
 	```
-	stdout에 결과를 출력
+	-E 옵션만 사용하면 전처리된 결과를 stdout에 보여주기만 한다.  
 	```
 	$ gcc -E 01.option-E.c > 01.option-E.i
 	```
-	리디렉션으로 .i 생성  
+	redirection으로 .i를 생성한다.  
 	![E](../Images/E.png)
 	
 * -S  
-	컴파일하여 어셈블리 파일(.s)을 생성
+	컴파일하여 어셈블리 파일(.s)을 생성한다.
 	```
 	$ gcc -S 02.option-S.i
 	```
@@ -57,7 +57,7 @@
 	![S](../Images/S.png)
 	
 * -c  
-	어셈블하여 목적 파일(.o)을 생성
+	어셈블하여 목적 파일(.o)을 생성한다.
 	```
 	$ gcc -c 03.option-c.s
 	```
@@ -65,14 +65,14 @@
 	![c](../Images/c.png)
 	
 * -D  
-	외부에서 매크로를 define
+	외부에서 매크로를 define한다.
 	```
 	$ gcc -DNO 05.option-D.c
 	```
 	![D](../Images/D.png)
 	
 * -g  
-	운영체제 고유의 형식으로 디버깅 정보를 만듦
+	운영체제 고유의 형식으로 디버깅 정보를 만든다.
 	```
 	$ gcc -g 06.option-g.c
 	```
@@ -82,14 +82,14 @@
 	on Git Bash
 	
 * -Wall  
-	GCC가 제공할 수 있고, 일반적으로 유용한 모든 경고 메시지 출력
+	GCC가 제공할 수 있고, 일반적으로 유용한 모든 경고 메시지 출력한다.
 	```
 	$ gcc -Wall 07.option-Wall.c
 	```
 	![Wall](../Images/Wall.png)
 	
 * -I(upper case of i)  
-	헤더 파일을 검색할 디렉터리를 추가
+	헤더 파일을 검색할 디렉터리를 추가한다.
 	```
 	$ gcc -ImyInclude 09.option-I.c
 	```
diff --git a/8.7/Makefile b/8.7/Makefile
index 30537e19f910ff2493240b358bcfc03fe8e2025c..5acb5bf168c95a4098e7bfbf2fe3797be200c11f 100644
--- a/8.7/Makefile
+++ b/8.7/Makefile
@@ -4,17 +4,11 @@ OBJS=main.o func.o
 test: $(OBJS)
 	$(CC) -o $@ $^
 
-id: main.o id_func.o
-	$(CC) -o test $(OBJS)
-
 main.o: main.c
-	$(CC) -c main.c
+	$(CC) -c $^
 
 func.o: func.c
-	$(CC) -c func.c
+	$(CC) $(CFLAGS) -c $^
 
-id_func.o: func.c
-	$(CC) -DPRINT_ID -c func.c
-	
 clean:
 	rm $(OBJS) test
diff --git a/8.7/README.md b/8.7/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..4249e608dbb6c2fff1d07d7af4a4f71ba33e0dff
--- /dev/null
+++ b/8.7/README.md
@@ -0,0 +1,79 @@
+# Make
+
+### make란?
+
+* 프로그램 그룹 중에서 어느 부분이 새롭게 컴파일 되어야 하는지를 자동적으로 판단해서 필
+요한 커맨드를 사용해서 그들을 재 컴파일 시킴
+* 많은 프로그램 모듈들로 구성된 대규모 프로그램을 효율적으로 유지하고, 일관성 있게 관리
+하도록 도와주는 도구
+* 소스 수정 시 유관 파일들을 재컴파일 & 링크하는 반복적인 작업을 간단하게 처리함
+* 선결조건(prerequisites)으로부터 대상(target)을 만들어 내는 다목적 프로그램
+
+### make의 동작
+
+* make는 여러 파일들 간의 의존성을 저장하고 수정된 파일에 연관된 소스 파일들만을 재
+컴파일 하도록 해줌
+* 수정한 소스 파일들만 자동적으로 재 컴파일하고 링크하도록 함
+* 소스 수정 시 유관 파일들을 재컴파일 & 링크하는 반복적인 작업을 간단하게 처리함
+* make 유틸리티는 이전에 make 명령을 실행했던 시점 이후에 이뤄진 프로젝트 작업들에
+대해서만 갱신 작업을 수행함
+
+### make의 필요성
+
+* 프로그램 개발 및 유지보수의 편리성을 지원
+* 명령어의 배치 처리 가능, 자주 쓰는 명령어를 자동화할 수 있음
+* 입력파일 변경 시 자동적으로 결과 파일이 바뀌기를 원할 때
+
+# Makefile
+
+`대상(target) : 의존하는 파일들(prerequisites)`  
+`<tab> 명령어(command)`  
+`<tab> 명령어(command)`  
+
+* clean
+주로 make하는 과정에서 생긴 .o 파일이나 실행 파일을 삭제하는 역할
+
+* dep
+gccmakedep 명령어를 통해 의존 관계를 자동으로 생성한다.
+
+`<identifier> = <files>`  
+identifier를 통해 여러 개의 파일들을 간단하게 부를 수 있는 매크로
+코드 상에서 쓸 때는 `$(<identifier>)`로 써야 한다.
+
+* 내장매크로(Internal macro)
+
+| 매크로 | 의미 |
+|:--:|--|
+| $@ | 현재의 목표 (Target) 파일명 |
+| $? | 현재의 목표파일(Target)보다 더 최근에 갱신된 의존 파일 명단 |
+| $* | 현재의 목표파일(Target)보다 더 최근에 갱신된 확장자를 제외한 의존 파일 명단 |
+| $< | 의존 파일(전제 조건) 중 첫번째 파일명 |
+| $^ | 현재 모든 의존 파일들의 명단 |
+| $+ | '$^'과 같지만, 두 번 이상 나열된 전제 조건은 makefile에 나열된 순서대로 복제됨 |
+| $% | 타깃이 라이브러리 모듈일 때 멤버에 대응되는 파일명 |
+
+* 내장매크로(Pre-defined macro)
+
+| 매크로 | 의미 |
+|:--:|--|
+| AR | Archive-maintaining program; default ‘ar’. |
+| ARFLAGS | ar 명령어의 옵션 설정 |
+| AS | Program for compiling assembly files; default ‘as’. |
+| ASFLAGS | as 명령어의 옵션 설정 |
+| CC | Program for compiling C programs; default ‘cc’. |
+| CFLAGS | cc 명령어의 옵션 설정 |
+| CXX | Program for compiling C++ programs; default ‘g++’. |
+| CXXFLAGS | g++ 명령어의 옵션 설정 |
+| LDFLAGS | ld 명령어의 옵션 설정 |
+
+* 확장자 규칙 (Suffix Rules)
+확장자 규칙은 미리 정의해 놓은 일반화한 기술 파일 항목을 가리킴
+
+```
+.SUFFIXES : .o .c .s
+
+.c.o :
+	$(CC) $(CFLAGS) -c $<
+.s.o :
+	$(AS) $(ASFLAGS) -o $@ $<
+```
\ No newline at end of file
diff --git a/README.md b/README.md
index e16ba470c5e5609dbbfdf109f96584d704b692b0..114d41d2c128fe9b41ad76c4a86e0b915c83d433 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,173 @@
 # battle_c
 
-## Jangwon Lee - Team 1
+### Jangwon Lee - Team 3
 
-실전코딩2 실습
+실전코딩2
 
-## printf
+# printf
 
-### stdio.h
+`int printf(const char *format, ...)`  
+printf 함수는 매개변수를 format에 따라서 출력해주는 함수다.
 
-* stderr, stdout, stdin에 대해서 배움
+`int fprintf(FILE *stream, const char *format, ...)`  
+printf 함수는 실행될 때 내부에서 fprintf 함수로 바뀌어서 실행된다.
 
-# 컴파일러 VS 인터프리터
+```
+printf("Hello World");
+fprintf(stdout, "Hello World");
+```
+printf 함수가 fprintf 함수로 바뀔 때 stream에 stdout이 들어가게 되고 두 함수는 완전히 같은 역할을 한다.
+
+# stdio.h
+
+standard input output library의 줄임말로 표준 입출력과 관련된 함수, 매크로 등이 포함된 헤더 파일이다.
+
+### stream
+
+* stdin  
+표준 입력 스트림(키보드)를 참조하는 FILE에 대한 포인터
+
+* stdout  
+표준 출력 스트림(스크린)를 참조하는 FILE에 대한 포인터
+
+* stderr  
+표준 오류 스트림(스크린)를 참조하는 FILE에 대한 포인터
+
+# man
+
+`man <command | function | header file | ...>`  
+manual의 줄임말로 명령어나 함수, 헤더 파일 등에 대한 사용법을 알려주는 명령어다.
+
+# redirection
+
+redirection이란 스트림의 흐름을 바꿔주는 것이다. redirection을 이용해 프로세스의 스트림을 콘솔이 아닌 파일을 사용할 수 있다.
+
+* \>  
+`file > output`  
+표준 출력을 파일로 redirection한다. 파일이 없으면 새로 만들고, 파일이 있으면 덮어쓴다.
+```
+$ ./test > output_data
+```
+
+* \>>  
+`file >> output`  
+표준 출력을 파일로 redirection한다. 파일이 없으면 새로 만들고, 파일이 있으면 파일의 끝에 덧붙인다. 
+```
+$ ./test >> output_data
+```
+
+* <  
+`file < input`  
+ 파일로부터 표준 입력을 받도록 redirection한다.
+```
+$ ./test < intput_data
+```
+
+# C Preprocessor
+
+전처리기(preprocessor)는 전처리(.c -> .i)를 해주는 도구이다. 전처리는 .h에 있는 텍스트들을 .c에 치환(붙여넣기)해주는 과정이다. C Preprocessor는 CPP로 줄여쓰기도 한다.
+
+### Including files
+
+* `#include <filename>`  
+표준 헤더 파일을 include하는 방식으로 표준 라이브러리들이 모여있는 폴더에서 헤더 파일을 검색해서 include한다.
+
+* `#include "filename"`  
+사용자 헤더 파일을 include하는 방식으로 현재 소스 파일이 위치한 폴더에서 헤더 파일을 검색해서 include한다.
+
+### Conditional compilation
+
+#if, #ifdef, #ifndef, #else, #elif, #endif는 조건부 컴파일을 할 수 있게 한다. 조건이 맞지 않으면 그 부분이 컴파일에서 제외된다. 즉, 소스 자체가 없는 효과가 있다.
+#error을 사용하여 컴파일을 실패하게 할 수도 있다.
+
+### Macro definition
+
+특정 숫자, 함수, 프로그램 블록을 다른 형태로 변환 지정한다. 변환은 원래 한 줄만 가능하지만 \를 사용하여 여러 줄을 연결할 수 있다.
+
+* `#define <identifier> <replacement token list>`  
+대상변환형(Object-like macros)이라고 하며 identifier를 replacement token list로 변환한다.
+
+* `#define <identifier>(<parameter list>) <replacement token list>`  
+유사함수변환형(Function-like macros)이라고 하며 identifier와 parameter list를 replacement token list로 변환한다.
+
+* `#undef <identifier>`  
+#undef를 사용해 정의된 매크로를 무효화할 수도 있다.
+
+```c
+#define f(a) a*a
+b = f(20+13) // b = 293
+```
+전처리는 단순히 텍스트를 치환하는 것이기 때문에 위의 코드를 실행할 시
+```c
+b = 20 + 13 * 20 + 13
+```
+이렇게 치환되므로 괄호를 최대한 많이 써주는 것이 좋다.
+```c
+#define f(a) ((a)*(a))
+b = f(20+13) // b = 1089
+```
+
+### etc.
+
+* #pragma once  
+`#pragma once`를 사용하여 여러번 include하는 것을 방지할 수 있다.
+
+*  Token stringification  
+`#define <identifier>(<parameter>) #parameter`  
+#연산자는 token을 문자열 상수로 변환한다.
+
+* Token concatenation  
+`#define <identifier>(<parameter>) parameter##string`  
+##연산자는 두 token을 하나로 연결하여 변환한다.
+
+* Debuging macros  
+디버깅을 하면서 어느 부분에서 에러가 났는 지 알려준다.
+
+	* __FILE\_\_  
+	에러가 발생한 파일 경로
+	* __LINE\_\_  
+	에러가 발생한 라인
+	* __FUNCTION\_\_  
+	에러가 발생한 함수
+
+# Multiple file compile
+
+* func.h
+```
+#define SQAURE(a) ((a)*(a))
+extern int func(int a);
+```
+
+* func.c
+```
+#include "func.h"
+
+int func(int a)
+{
+	return(a * 10);
+}
+```
+
+* main.c
+```
+#include <stdio.h>
+#include "func.h"
+
+int main()
+{
+	printf("func(100): %d SQUARE(10): %d\n", func(100), SQUARE(10));
+	return 0;
+}
+```
+
+보통 이런 식으로 코드를 작성하고
+
+```
+$ gcc main.c func.c
+```
+이렇게 컴파일, 링크하여 실행 파일을 실행한다.
+
+# 컴파일러 vs 인터프리터
 
 컴파일러와 인터프리터는 고급언어로 작성된 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분된다.
 
@@ -42,26 +199,26 @@
 # GCC 명령어 옵션
 
 * -o  
-		지정한 파일명에 출력
+		지정한 파일명에 출력한다
 	```
 	$ gcc -o 00.option-o 00.option-o.c
 	```
 	![o](./Images/o.png)
 	
 * -E  
-	전처리하여 전처리된 소스 파일(.i)을 생성
+	전처리하여 전처리된 소스 파일(.i)을 생성한다
 	```
 	$ gcc -E 01.option-E.c
 	```
-	stdout에 결과를 출력
+	-E 옵션만 사용하면 전처리된 결과를 stdout에 보여주기만 한다.  
 	```
 	$ gcc -E 01.option-E.c > 01.option-E.i
 	```
-	리디렉션으로 .i 생성  
+	redirection으로 .i를 생성한다.  
 	![E](./Images/E.png)
 	
 * -S  
-	컴파일하여 어셈블리 파일(.s)을 생성
+	컴파일하여 어셈블리 파일(.s)을 생성한다
 	```
 	$ gcc -S 02.option-S.i
 	```
@@ -69,7 +226,7 @@
 	![S](./Images/S.png)
 	
 * -c  
-	어셈블하여 목적 파일(.o)을 생성
+	어셈블하여 목적 파일(.o)을 생성한다
 	```
 	$ gcc -c 03.option-c.s
 	```
@@ -77,14 +234,14 @@
 	![c](./Images/c.png)
 	
 * -D  
-	외부에서 매크로를 define
+	외부에서 매크로를 define한다
 	```
 	$ gcc -DNO 05.option-D.c
 	```
 	![D](./Images/D.png)
 	
 * -g  
-	운영체제 고유의 형식으로 디버깅 정보를 만듦
+	운영체제 고유의 형식으로 디버깅 정보를 만든다
 	```
 	$ gcc -g 06.option-g.c
 	```
@@ -94,15 +251,95 @@
 	on Git Bash
 	
 * -Wall  
-	GCC가 제공할 수 있고, 일반적으로 유용한 모든 경고 메시지 출력
+	GCC가 제공할 수 있고, 일반적으로 유용한 모든 경고 메시지 출력한다
 	```
 	$ gcc -Wall 07.option-Wall.c
 	```
 	![Wall](./Images/Wall.png)
 	
 * -I(upper case of i)  
-	헤더 파일을 검색할 디렉터리를 추가
+	헤더 파일을 검색할 디렉터리를 추가한다
 	```
 	$ gcc -ImyInclude 09.option-I.c
 	```
-	![I](./Images/I.png)
\ No newline at end of file
+	![I](./Images/I.png)
+	
+# Make
+
+### make란?
+
+* 프로그램 그룹 중에서 어느 부분이 새롭게 컴파일 되어야 하는지를 자동적으로 판단해서 필
+요한 커맨드를 사용해서 그들을 재 컴파일 시킴
+* 많은 프로그램 모듈들로 구성된 대규모 프로그램을 효율적으로 유지하고, 일관성 있게 관리
+하도록 도와주는 도구
+* 소스 수정 시 유관 파일들을 재컴파일 & 링크하는 반복적인 작업을 간단하게 처리함
+* 선결조건(prerequisites)으로부터 대상(target)을 만들어 내는 다목적 프로그램
+
+### make의 동작
+
+* make는 여러 파일들 간의 의존성을 저장하고 수정된 파일에 연관된 소스 파일들만을 재
+컴파일 하도록 해줌
+* 수정한 소스 파일들만 자동적으로 재 컴파일하고 링크하도록 함
+* 소스 수정 시 유관 파일들을 재컴파일 & 링크하는 반복적인 작업을 간단하게 처리함
+* make 유틸리티는 이전에 make 명령을 실행했던 시점 이후에 이뤄진 프로젝트 작업들에
+대해서만 갱신 작업을 수행함
+
+### make의 필요성
+
+* 프로그램 개발 및 유지보수의 편리성을 지원
+* 명령어의 배치 처리 가능, 자주 쓰는 명령어를 자동화할 수 있음
+* 입력파일 변경 시 자동적으로 결과 파일이 바뀌기를 원할 때
+
+# Makefile
+
+`대상(target) : 의존하는 파일들(prerequisites)`  
+`<tab> 명령어(command)`  
+`<tab> 명령어(command)`  
+
+* clean
+주로 make하는 과정에서 생긴 .o 파일이나 실행 파일을 삭제하는 역할
+
+* dep
+gccmakedep 명령어를 통해 의존 관계를 자동으로 생성한다.
+
+`<identifier> = <files>`  
+identifier를 통해 여러 개의 파일들을 간단하게 부를 수 있는 매크로
+코드 상에서 쓸 때는 `$(<identifier>)`로 써야 한다.
+
+* 내장매크로(Internal macro)
+
+| 매크로 | 의미 |
+|:--:|--|
+| $@ | 현재의 목표 (Target) 파일명 |
+| $? | 현재의 목표파일(Target)보다 더 최근에 갱신된 의존 파일 명단 |
+| $* | 현재의 목표파일(Target)보다 더 최근에 갱신된 확장자를 제외한 의존 파일 명단 |
+| $< | 의존 파일(전제 조건) 중 첫번째 파일명 |
+| $^ | 현재 모든 의존 파일들의 명단 |
+| $+ | '$^'과 같지만, 두 번 이상 나열된 전제 조건은 makefile에 나열된 순서대로 복제됨 |
+| $% | 타깃이 라이브러리 모듈일 때 멤버에 대응되는 파일명 |
+
+* 내장매크로(Pre-defined macro)
+
+| 매크로 | 의미 |
+|:--:|--|
+| AR | Archive-maintaining program; default ‘ar’. |
+| ARFLAGS | ar 명령어의 옵션 설정 |
+| AS | Program for compiling assembly files; default ‘as’. |
+| ASFLAGS | as 명령어의 옵션 설정 |
+| CC | Program for compiling C programs; default ‘cc’. |
+| CFLAGS | cc 명령어의 옵션 설정 |
+| CXX | Program for compiling C++ programs; default ‘g++’. |
+| CXXFLAGS | g++ 명령어의 옵션 설정 |
+| LDFLAGS | ld 명령어의 옵션 설정 |
+
+* 확장자 규칙 (Suffix Rules)
+확장자 규칙은 미리 정의해 놓은 일반화한 기술 파일 항목을 가리킴
+
+```
+.SUFFIXES : .o .c .s
+
+.c.o :
+	$(CC) $(CFLAGS) -c $<
+.s.o :
+	$(AS) $(ASFLAGS) -o $@ $<
+```
\ No newline at end of file