From 48663250d6e1bd3cac6ad2e3b8aa58aa29ec0abb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=9D=B4=EC=9E=A5=EC=9B=90?= <wkddnjs3268@ajou.ac.kr>
Date: Sun, 9 Aug 2020 11:43:21 +0900
Subject: [PATCH] Update README.md

---
 README.md | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 81 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index c20ff51..114d41d 100644
--- a/README.md
+++ b/README.md
@@ -262,4 +262,84 @@ $ gcc main.c func.c
 	```
 	$ 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
-- 
GitLab