본문 바로가기
프로그래밍/CS

[유닉스] make 정리

by 엽기토기 2020. 12. 23.
반응형

[ make ]
 
정의:
-make는 각 파일 간의 종속 관계를 파악해 기술 파일(Makefile)에 기술된 대로 컴파일 명령이나 쉘 명령을 순차적으로 내린다.
-make는 각 파일에 대한 반복적 명령을 자동화 시켜 개발자의 수고를 덜고, 시간을 절약할 수 있다.
 
<기본동작>
makefile 내용

all : diary #(1)
  
diary : memo.o calendar.o main.o #(2)
             gcc -W -Wall –o diary memo.o calendar.o main.o #(3)
  
memo.o : memo.c #(4)
             gcc -w -Wall -c -o memo.o memo.c #(5)
  
calendar.o : calendar.c (6)
             gcc -w -Wall -c -o calendar.o calendar.c #(7)
  
main.o : main.c #(8)
             gcc -w -Wall -c -o main.o main.c #(9)
  
clean :
             rm - rf *.o diary

순서:
1-2
-4-5-2
-6-7-2
-8-9-2-3-1
 
make 명령 시,
GNUmakefile, makefile, Makefile 순으로 기술 파일을 찾음.
 
<기본구조>

CC = gcc #(매크로정의)

target1 : dependency1 dependency2 #(룰1)
             command1 #(명령)
             command2 
  
target2 : dependency3 dependency4 dependency5 #(룰2)
             command3 
             command4

 

<규칙>
1. 명령의 시작은 반드시 tab으로 시작.

target1 : dependency1 dependency2 
             command1

 

2. 비어있는 행은 무시됨.

target1 : dependency1 dependency2 
  
             command1

 

3. #을 만나면 개행 문자를 만날 때까지 무시함.

target1 : dependency1 dependency2 #주석
             command1
#주석

 

4. 기술 행이 길어지면 \를 사용해 이을 수 있다.

target1 : dependency1 dependency2\
             dependency3

 

5. ;는 명령라인을 나눌 때 사용함.

target1 : dependency1 dependency2;              command1

 

6. 종속 항목이 없는 타겟도 사용 가능.

target1 : command1

 

7. 명령 부분에는 어떤 명령이 와도 상관 없음.

<매크로>
-기술 파일 내의 매크로:
사용자 정의 변수에 특정한 문자열을 정의하고 표현하는 것을 의미.
 
*매크로는 좀 더 일관되고 좀 더 이식성이 높고 융통성 있는 기술 파일을 만들기 위해 필요하다.
 

(예제)

CC = gcc 
CFLAGS = -W -Wall 
TARGET = diary 
  
all : $(TARGET) 
  
$(TARGET) : memo.o calendar.o main.o 
             $(CC) $(CFLAGS) –o $(TARGET) memo.o calendar.o main.o 
  
memo.o : memo.c 
             $(CC) $(CFLAGS) -c -o memo.o memo.c 
  
calendar.o : calendar.c 
             $(CC) $(CFLAGS) -c -o calendar.o calendar.c 
  
main.o : main.c 
             $(CC) $(CFLAGS) -c -o main.o main.c 
  
clean :
             rm - rf *.o $(TARGET)
반응형