본문 바로가기

임베디드 리눅스

make 는 무엇이며 왜 사용하는 것일까 2

728x90
반응형

안녕하세요. WH 입니다. 오늘도 다시 하나하나 정리해 볼까요?

make는 프로그램 그룹을 유지하는 데 필요한 유틸리티인데요, make 유틸리티의 목적은

프로그램 그룹 중에서 새롭게 컴파일 되는 부분을 자동으로 판단하여 재컴파일 합니다.

 

즉, make는

입력 파일이 바뀌면 자동적으로

결과 파일이 바뀌길 원할 때 사용합니다

 

잠깐 복습하고 갈까요?

Makefile은 위와 같은 규칙들의 나열이며, target 부분은 command가 수행되어 나온 결과를 저장하기 때문에

object file이나 실행 파일이 됨을 생각해 볼 수 있겠지요,

 

command 부분에 정의된 command들은 TAB으로 시작하며 dependency 부분에 정의된 파일이 바뀌었고나,

target에 해당하는 파일이 없을 때 차례대로 실행하는데요,

참고로 shell에서 쓸수 있는 명령어들을 사용할 수 있고, bash 기반 shell script도 지원합니다

또한 target 부분에는 결과 파일만이 아닌 간단한 label 기능도 제공한답니다.

 

여튼 지난 글에서 간단한 두개의 사용예제를 보였는데요,

사실 설명을 하진 않았지만 매크로 사용예제를 넣어놨습니다.

기억이 나질 않는다면 아래글을 참조하세요.

2022.01.25 - [임베디드 리눅스] - make 는 무엇이며 왜 사용하는 것일까1

 

make 는 무엇이며 왜 사용하는 것일까1

안녕하세요, WH 입니다. make 에 대해 알아보는 글입니다. 바로 전 글에서 compile 과정에 대해서 설명했었는데요. compile 과정은 여러개의 소스코드를 목적 파일을 만들고 해당 목적코드들을 링크하

developer-wh.tistory.com

 

서론이 길었네요, 그래서 오늘은 무엇을 다뤄볼 것이냐

내부 매크로와 Suffix rule( 확장자 규칙 )을 다뤄보려고 합니다.

이번 글은 makefile을 잘 만드는 능력을 위한 글이 되겠네요

 

OBJECTS = main.o input.o output.o
CC = gcc
CFLAGS = -g-c
TARGET = program


$(TARGET) : $(OBJECTS)

    $(CC) -o $(TARGET) $(OBJECTS)

clean :

    rm -rf $(OBJECTS $(TARGET) core

main.o : io.h main.c 
input.o : io.h input.c
output.o: io.h output.c

아마 gcc -g 옵션에 대해 잘 안나와있을 거에요

-g 옵션은 gcc가 호출하는 하위 프로세서에 자동적으로 전달되는 옵션으로

-W<letter> 옵션을 사용해서 다른 옵션을 전달할 수 있어요

 

여기서 특이한 부분은

 

main.o : io.h main.c     

input.o : io.h input.c    

output.o : io.h input.c  

 

 .c 파일을 .o 파일로 바꾸는 부분이 없다는 점인데요

앞의 CFLAGS 옵션을 .o 파일을 만들어주는 역할을 하는 것이죠.

또한 이 부분은 파일이 어디에 의존하는지에 대한 의존 관계를 표시 해주기 때문에

반드시 필요한 부분이라는 점 기억해주세요

 

그 다음으로 Suffix rule 에 대해 정리해 볼까하는데요,

확장자에 따라 적절한 연산을 수행시키는 규칙을 말합니다.

알아두시면 좋은 내부 매크로는 .SUFFIXES 라는 매크로인데요.

make 파일은 가끔 파일을 빼먹고 처리하곤 하는데,

해당 매크로를 사용하면 주의 깊게 보라고 전달하게 되죠

 

.SUFFIXES : .c .o 라 입력하면,

.c .o 파일을 주의 깊게 관리해라가 되는것이죠

 

관리가 무엇이고 내부에서 어떤 동작을 하냐구요?

.c.o :                                                 
$(CC) $(CFLAGS) -c $< -o $@

다음과 같은 루틴이 자동적으로 동작하게 되는 건데요음 그냥 간단히 말하면, .c 파일을 컴파일해서 .o 파일로 만들라는 부분이 자동적으로 수행된다는 의미에요

오늘은 여기까지만 정리하도록 할게요.

사실 makefile 작성을 잘하는 것만으로도 규모가 큰 프로그램 파일들을 다루는데 큰 도움이 될겁니다.

차차 정리하도록 할게요. 댓글은 큰힘이 된답니다. 다음에 뵈요

728x90
반응형